Skip to content

GiovanniCardamone/requerest

Repository files navigation

RequeRest

Logo

JavaScript TypeScript

CI Coverage Status Known Vulnerabilities NPM version NPM downloads

RequeRest is a library intended to build http rest client, it's made to be simple, and to compose property

📦 Installation

npm install requerest

🚀 Simple Usage

a simple example how to build a client with requerest

// this is just an Headers object
const authorization = () => {
  Authorization: 'Bearer my.bearer.token'
}

const client = new RequeRest('http://localhost')
const info = await client.get('info') // GET http://localhost/info

const authorizedClient = client.with(authorization)
const userResource = authorizedClient.path('users')
const userPostsResource = (id: string) => userResource.path(`${id}/posts`)

const users = await userResource.query({ banned: false }).get() // GET http://localhost/users?banned=false { Authorization: 'Bearer my.bearer.token' }
const foo = await userResource.get('foo') // GET http://localhost/users/foo { Authorization: 'Bearer my.bearer.token' }

const fooAvatar = await userResource.decode('image/png').get('foo/avatar') // GET http://localhost/users/foo/avatar { Authorization: 'Bearer my.bearer.token' }
const fooPosts = await userPostResource(foo.id).get() // GET http://localhosts/users/foo/posts { Authorization: 'Bearer my.bearer.token' }

🛰️ Better Usage

// a module that contains the client

const client = new RequeRest('http://localhost')
const clientBearer = client.with(() => {
  Authorization: window.localStorage.getItem('bearerToken')
}) // or whatever logic is in your app

const usersResource = clientBearer.path('users')

export default {
  users: {
    list: (query) => usersResource.query(query).get(),
    create: (user) => usersResource.post(user),
  },
  user: (id) => () => {
    const userResource = usersResource.path(id)

    return {
      read: () => userResource.get(),
      update: (data) => userResource.patch(data),
      delete: () => userResource.delete(),
      avatar: () =>
        userResource
          .path('avatar')
          .decode('image/png')
          .with({ ciao: 'mondo' })
          .get(),
      posts: {
        // default values
        list: (query = { showDeleted: true }) =>
          userResource.path('posts').query(query).get(),
        create: (data) => userResource.path('posts').post(post),

        // and so on
      },
    }
  },
}

await client.user('foo').posts.list()
// client usage
import client from './client'

const users = await client.users.list()
await users.create({ id: 'foo', name: 'Foo', surname: 'Bar' })

const foo = await client.user('foo')

const fooUser = await foo.read()
const fooAvatar = await foo.avatar()
const fooPosts = await foo.posts.list({ showDeleted: false })

await foo.posts.create({ title: 'hello world', body: 'Hello to everyone!' })

🆒 User Requerest in NodeJs

RequeRest is using fetch interface, so to use in node you have to install node-fetch.

npm i node-fetch

📚 Documentation

Full Documentation

🏷️ License

MIT

About

browser library to organize http client

Resources

License

Stars

Watchers

Forks

Packages

No packages published