Skip to content

apicase/adapter-fetch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

78 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@apicase/adapter-fetch

Fetch adapter for @apicase/core

Installation

  1. Install via NPM
npm install @apicase/adapter-fetch
  1. Import it
import { apicase } from '@apicase/core'
import fetch from '@apicase/adapter-fetch'

const fetchAPI = apicase(fetch)

We use node-fetch as polyfill for Node.js

Basic usage

const req = await fetchAPI({
  url: '/api/posts',
  headers: { token: 'my_secret_token' },
  query: { userId: 1 }
})

// Whether request was succeed or failed
console.log(req.success)

// Fetch result (with response body, headers etc)
console.log(req.result)

Features

Url params

Fetch adapter has path-to-regexp to pass urls params smarter.
Params are stored in params property

fetchAPI({
  url: '/api/posts/:id',
  params: { id: 1 }
})
// => GET /api/posts/1

Query params

You can define query params in query property

fetchAPI({
  url: '/api/posts',
  query: { userId: 1 }
})
// => GET /api/posts?userId=1

Status validation

If you have some specific API, you can define custom status validation

fetchAPI({
  url: '/api/posts',
  validateStatus: status => status === 200
})

Default status validation behaviour is:

function(status) {
  return status >= 200 && status < 300
}

Url concatenation in services

Extended services will have concatenated URI, if the next part doesn't start with /:

const service1 = new ApiService(fetch, { url: '/api' })

// { "url": "/api/posts" }
const service2 = service1.extend({ url: 'posts' })

// { "url": "/posts" }
const service3 = service1.extend({ url: '/posts' })

Full payload params list

{
  // Request URL
  "url": String,
  // Response parser
  // default: 'json'
  "parser": String,
  // Request method
  // default: 'GET'
  "method": String,
  // Request headers
  // default: {}
  "headers": Object,
  // Request body
  // default: undefined
  "body": Object|FormData,
  // Credentials
  // default: 'omit'
  "credentials": String,
  // URL params
  // default: {}
  "params": Object,
  // Query params
  // default: {}
  "query": Object,
  // Status validation callback
  // default: status => status >= 200 && status < 300
  "validateStatus": Function
}

Author

Anton Kosykh

License

MIT