All Projects → iainjreid → drowsy

iainjreid / drowsy

Licence: MIT license
😪 Lazy integrations tool for RESTful interfaces to aid POC development and streamline integrations

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to drowsy

Openapi Generator
OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)
Stars: ✭ 10,634 (+55868.42%)
Mutual labels:  api-client, api-server, rest-client
webapi
WAI based library for web api
Stars: ✭ 27 (+42.11%)
Mutual labels:  api-client, api-server
RESTEasy
REST API calls made easier
Stars: ✭ 12 (-36.84%)
Mutual labels:  api-client, rest-client
Taviloglu.Wrike.ApiClient
.NET Client for Wrike API
Stars: ✭ 24 (+26.32%)
Mutual labels:  api-client, rest-client
sevenbridges-python
SevenBridges Python Api bindings
Stars: ✭ 41 (+115.79%)
Mutual labels:  api-client, rest-client
apiron
🍳 apiron is a Python package that helps you cook a tasty client for RESTful APIs. Just don't wash it with SOAP.
Stars: ✭ 106 (+457.89%)
Mutual labels:  api-client, rest-client
radiobrowser4j
RadioBrowser Java API library
Stars: ✭ 30 (+57.89%)
Mutual labels:  api-client, rest-client
noire-server
Hapi Boilerplate
Stars: ✭ 20 (+5.26%)
Mutual labels:  api-client, api-server
Datafire
A framework for building integrations and APIs
Stars: ✭ 487 (+2463.16%)
Mutual labels:  api-client, rest-client
Apipie
Transform api declaration to js object for frontend. Inspired by VueRouter, koa-middleware and axios.
Stars: ✭ 29 (+52.63%)
Mutual labels:  api-client, rest-client
Apiclientcodegen
A collection of Visual Studio custom tool code generators for Swagger / OpenAPI specification files
Stars: ✭ 50 (+163.16%)
Mutual labels:  api-client, rest-client
pimba
Pimba is a minimalist command-line tool written in Go to publish and serve static files.
Stars: ✭ 12 (-36.84%)
Mutual labels:  api-client, api-server
restofus
Restofus - a cross-platform (REST) API client.
Stars: ✭ 18 (-5.26%)
Mutual labels:  api-client, rest-client
bitrix
Bitrix24 REST API client that doesn't suck. Suffer no more.
Stars: ✭ 59 (+210.53%)
Mutual labels:  api-client, rest-client
NClient
💫 NClient is an automatic type-safe .Net HTTP client that allows you to call web service API methods using annotated interfaces or controllers without boilerplate code.
Stars: ✭ 25 (+31.58%)
Mutual labels:  api-client, rest-client
purescript-swerve
Swerve is a library that offers a type-level DSL for describing server and client web applications. Inspired by Haskell's Servant library.
Stars: ✭ 20 (+5.26%)
Mutual labels:  api-client, api-server
YuiAPI
一个浏览器API测试客户端,API文档生成器,支持chrome/firefox/新版edge
Stars: ✭ 25 (+31.58%)
Mutual labels:  api-client, rest-client
simple-php-api
An extremely simple API (with authentication) example, written in PHP (server) and JS (client), using JSON
Stars: ✭ 23 (+21.05%)
Mutual labels:  api-client, api-server
Parse Dashboard For Ios
A beautiful mobile client for managing your Parse apps while you are on the go! Now you can easily view and modify your data in the same way you would on the offical desktop client.
Stars: ✭ 81 (+326.32%)
Mutual labels:  api-client, rest-client
go-pangu
rest api web server based on go(High availability, high security, high performance)
Stars: ✭ 45 (+136.84%)
Mutual labels:  api-server, rest-server

Drowsy

A universal REST client that makes integrating with services so wonderfully simple, you'll probably forget you're talking to an API after all. Think gRPC or SOAP, but for REST.

Description

A hugely versatile REST client and server interface, that lets you extend libraries like Request, Express, Axios, Fastify, and many more, largely by removing the need for the boilerplate code often inherent when using these tools.

At its heart, Drowsy builds upon a common design pattern found in the majority of the HTTP related tools that the community has to offer. More often than not, the pattern looks like this.

library.get(url[, options][, cb])

This was likely inspired by the original Node.js HTTP module

Drowsy is able to simplify the above by hoisting both the method and URL into the function name, providing a more gRPCesque interface, and cutting out any hardcoded URL strings.

API.getPing([, cb]);

This is an incredibly powerful abstraction, and one that can be stacked endlessly. This easily leads to even further optimisations, allowing your REST client or server to be treated as though it was nothing more than a large object of functions.

var UsersAPI = API.users

// Call GET hostname/users/all
UsersAPI.getAll([, cb])

// Call POST hostname/users/<userId>
UsersAPI.post[userId](options[, cb])

These function calls are largely identical for the client and server, only when there are placeholders in the URL will the Drowsy syntax differ.

Featured on Changelog

Examples

Below is a super simple example demonstrating how easy it can be to retrieve the first page of public Gists currently available on GitHub.

const github = drowsy(request, "https://api.github.com/");

github.getGists({
  headers: {
    "User-Agent": "Octo-app"
  }
});

By calling the method getGists you're in fact performing a GET request to the endpoint "/gists" through the handler provided (in this case, Request). The handler returns a Promise that will, hopefully, resolve in a timely fashion with the first page of public Gists found on GitHub.

Usage

Single command

The single command approach is the simplest and most human readable of the bunch, it has some minor limitations, but nothing that can't be avoided with a little imagination.

Each request is composed using just one lookup (both the HTTP method and the URL must be known at the time of writing). It's super elegant, and recommended to be used when talking to an API that has collections, or otherwise grouped endpoints exposed.

Limitations

This approach will only work with single word URL parts, and requires that you know all of them too, here's a breakdown of what would and wouldn't work.

// Yes - API.getCitiesLondon()
/cities/london

// Yes - API.getCitiesLondonPopulation()
/cities/london/population

// No - try API.getCities[cityId]()
/cities/[:cityId]

// No - try API.getCitiesLondon["is-capital"]()
/cities/london/is-capital

License

This project is released under the MIT License. Enjoy responsibly ✌️

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].