322 lines
13 KiB
HTML
322 lines
13 KiB
HTML
<h1 id="awesome-api-awesome-build-status">Awesome API <a
|
||
href="https://github.com/sindresorhus/awesome"><img
|
||
src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg"
|
||
alt="Awesome" /></a> <a
|
||
href="https://travis-ci.org/Kikobeats/awesome-api"><img
|
||
src="https://img.shields.io/travis/Kikobeats/awesome-api/master.svg?style=flat-square"
|
||
alt="Build Status" /></a></h1>
|
||
<blockquote>
|
||
<p>A curated list of awesome resources for design and implement RESTful
|
||
APIs.</p>
|
||
</blockquote>
|
||
<h2 id="design">Design</h2>
|
||
<h3 id="overview">Overview</h3>
|
||
<blockquote>
|
||
<p>REST allows us to create services and applications that can be used
|
||
by any device or client who understands HTTP.</p>
|
||
</blockquote>
|
||
<ul>
|
||
<li><a
|
||
href="http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api">Best
|
||
Practices for Designing a Pragmatic RESTful API</a> [<a
|
||
href="https://elbauldelprogramador.com/buenas-practicas-para-el-diseno-de-una-api-restful-pragmatica/">spanish
|
||
version</a>].</li>
|
||
<li><a
|
||
href="https://betimdrenica.wordpress.com/2015/03/09/ideal-rest-api-design/">Ideal
|
||
REST API Design</a>.</li>
|
||
<li><a
|
||
href="https://stackoverflow.blog/2020/03/02/best-practices-for-rest-api-design/">StackOverflow
|
||
best REST API Design</a>.</li>
|
||
<li><a
|
||
href="https://devcenter.heroku.com/articles/platform-api-reference">Heroku
|
||
API Reference</a>.</li>
|
||
<li><a href="https://github.com/Mashape/apiglossary">API Terms
|
||
Glossary</a>.</li>
|
||
<li><a href="https://github.com/interagent/http-api-design">HTTP API
|
||
Design by Heroku</a>.</li>
|
||
<li><a href="http://www.restapitutorial.com">Learn REST: A RESTful
|
||
Tutorial</a>.</li>
|
||
<li><a href="https://github.com/lambda2/rapis">RAPIS: A REST API
|
||
Standard for the 21th century</a>.</li>
|
||
<li><a
|
||
href="https://github.com/watson-developer-cloud/api-guidelines">IBM
|
||
Watson REST API Guidelines</a>.</li>
|
||
<li><a href="https://github.com/Microsoft/api-guidelines">Microsoft REST
|
||
API Guidelines</a>.</li>
|
||
<li><a href="http://zalando.github.io/restful-api-guidelines/">Zalando
|
||
RESTful API and Event Scheme Guidelines</a></li>
|
||
<li><a
|
||
href="https://www.gov.uk/guidance/gds-api-technical-and-data-standards">gov.uk
|
||
API technical and data standards</a></li>
|
||
<li><a
|
||
href="https://github.com/stickfigure/blog/wiki/How-to-%28and-how-not-to%29-design-REST-APIs">How
|
||
to (and how not to) design REST APIs</a></li>
|
||
</ul>
|
||
<h3 id="status-code">Status Code</h3>
|
||
<blockquote>
|
||
<p>When you are using a REST design you have to provide the HTTP status
|
||
code that are the more appropriated to respond to the request.</p>
|
||
</blockquote>
|
||
<ul>
|
||
<li><a href="http://www.restapitutorial.com/httpstatuscodes.html">HTTP
|
||
Status code table in RESTAPITutorial</a>.</li>
|
||
<li><a href="https://httpstatuses.com/">httpstatuses.com</a></li>
|
||
<li><a
|
||
href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html">Status
|
||
code definition in W3C</a>.</li>
|
||
<li><a href="https://tryhexadecimal.com/guides/http/">HTTP Status Code
|
||
Guides</a></li>
|
||
</ul>
|
||
<h3 id="authentication">Authentication</h3>
|
||
<ul>
|
||
<li><a href="https://github.com/teesloane/Auth-Boss">Auth Boss</a> –
|
||
Learn about different authentication methodologies on the web.</li>
|
||
<li><a
|
||
href="https://www.owasp.org/index.php/Authentication_Cheat_Sheet">Authentication
|
||
Cheat Sheet</a>.</li>
|
||
<li><a
|
||
href="https://stormpath.com/blog/the-problem-with-api-authentication-in-express/">The
|
||
Problem With API Authentication in Express</a>.</li>
|
||
<li><a
|
||
href="https://blog.risingstack.com/web-authentication-methods-explained/">Web
|
||
Authentication Methods Explained</a>.</li>
|
||
</ul>
|
||
<h4 id="jwt">JWT</h4>
|
||
<blockquote>
|
||
<p>JSON Web Token (JWT) is a compact, URL-safe means of representing
|
||
claims to be transferred between two parties.</p>
|
||
</blockquote>
|
||
<ul>
|
||
<li><a
|
||
href="https://auth0.com/blog/2014/01/27/ten-things-you-should-know-about-tokens-and-cookies/">10
|
||
Things You Should Know about Tokens</a>.</li>
|
||
<li><a
|
||
href="https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/">Cookies
|
||
vs Tokens</a>.</li>
|
||
<li><a
|
||
href="https://tools.ietf.org/html/draft-ietf-oauth-json-web-token">JWT
|
||
Draft in IETF</a>.</li>
|
||
<li><a href="http://jwt.io/">JWT.io</a>.</li>
|
||
<li><a
|
||
href="https://auth0.com/blog/2014/12/02/using-json-web-tokens-as-api-keys/">Using
|
||
JSON Web Tokens as API Keys</a>.</li>
|
||
<li><a href="http://info.meteor.com/blog/session-cookies">Why Meteor
|
||
doesn’t use session cookies</a>.</li>
|
||
<li><a
|
||
href="https://www.moesif.com/blog/technical/restful-apis/Authorization-on-RESTful-APIs/">Guide
|
||
on API authentication and authorization</a>.</li>
|
||
</ul>
|
||
<h3 id="authorization">Authorization</h3>
|
||
<h4 id="oauth">OAuth</h4>
|
||
<blockquote>
|
||
<p>An open protocol to allow secure authorization in a simple and
|
||
standard method from web, mobile and desktop applications</p>
|
||
</blockquote>
|
||
<ul>
|
||
<li><a
|
||
href="https://github.com/Kong/mashape-oauth/blob/master/FLOWS.md">The
|
||
OAuth Bible by Mashape</a>.</li>
|
||
</ul>
|
||
<h2 id="caching">Caching</h2>
|
||
<ul>
|
||
<li><a
|
||
href="https://jakearchibald.com/2016/caching-best-practices/">Caching
|
||
best practices & max-age gotchas</a>.</li>
|
||
<li><a
|
||
href="https://devcenter.heroku.com/articles/increasing-application-performance-with-http-cache-headers">Increasing
|
||
Application Performance with HTTP Cache Headers</a>.</li>
|
||
<li><a
|
||
href="https://support.cloudflare.com/hc/en-us/articles/200504045-Using-Cloudflare-with-your-API">Using
|
||
Cloudflare with your API</a>.</li>
|
||
</ul>
|
||
<h2 id="security">Security</h2>
|
||
<ul>
|
||
<li><a href="https://www.npmjs.com/package/helmet">Helmet, help secure
|
||
Express/Connect apps with various HTTP headers</a>.</li>
|
||
<li><a
|
||
href="https://github.com/GitGuardian/APISecurityBestPractices">APISecurityBestPractices</a>.</li>
|
||
<li><a href="https://nodesecurity.io/">Node Security Project</a>.</li>
|
||
<li><a
|
||
href="https://blog.risingstack.com/node-js-security-checklist/">Node.js
|
||
Security Checklist</a>.</li>
|
||
</ul>
|
||
<h2 id="format">Format</h2>
|
||
<ul>
|
||
<li><a href="http://stateless.co/hal_specification.html">HAL</a> –
|
||
Simple format that gives a consistent and easy way to hyperlink between
|
||
resources in your API (see: <a href="#hateoas">HATEOAS</a>).</li>
|
||
<li><a href="http://www.hydra-cg.com/">Hydra</a> – Vocabulary for
|
||
Hypermedia-Driven Web APIs (W3C).</li>
|
||
<li><a href="http://labs.omniti.com/labs/jsend">JSend</a> – Simple
|
||
specification that lays down some rules for how JSON responses from web
|
||
servers should be formatted.</li>
|
||
<li><a href="http://jsonapi.org/">JSON API</a> – Standard for building
|
||
APIs in JSON.</li>
|
||
<li><a href="http://json-ld.org/">JSON-LD</a> – Standard for describing
|
||
Linked Data and hypermedia relations in JSON (W3C).</li>
|
||
<li><a href="http://www.odata.org/">OData</a> – Open protocol to allow
|
||
the creation and consumption of queryable and interoperable RESTful
|
||
APIs. Quite complex.</li>
|
||
<li><a href="http://raml.org/">RAML</a> – Simple and succinct way to
|
||
describe RESTful API.</li>
|
||
<li><a href="http://schema.org">Schema.org</a> – Collection of schemas
|
||
describing common data models.</li>
|
||
</ul>
|
||
<h2 id="discover">Discover</h2>
|
||
<blockquote>
|
||
<p>Need a API for your projects?</p>
|
||
</blockquote>
|
||
<h3 id="curated-list">Curated list</h3>
|
||
<ul>
|
||
<li><a href="https://github.com/Abhishaker17/Awesome-APIs">Awesome APIs
|
||
Directory</a> – A public list of APIs from round the web.</li>
|
||
<li><a href="https://github.com/toddmotto/public-apis">public apis</a> –
|
||
A collective list of public JSON APIs for use in web development.</li>
|
||
</ul>
|
||
<h3 id="directory">Directory</h3>
|
||
<ul>
|
||
<li><a href="http://apis.io">apis.io</a> – API Search service to help
|
||
discover APIs on the web.</li>
|
||
<li><a
|
||
href="https://www.programmableweb.com/apis/directory">ProgrammableWeb</a>.</li>
|
||
</ul>
|
||
<h2 id="testing">Testing</h2>
|
||
<h3 id="querying">Querying</h3>
|
||
<ul>
|
||
<li><a href="https://firecamp.io">Firecamp</a> – Protocol agnostic API
|
||
testing client which help you test and manage RestAPIs, GraphQL,
|
||
Websocket and many more.</li>
|
||
<li><a href="https://github.com/jkbrzt/httpie">httpie</a> – Command line
|
||
HTTP client, far more dev-friendly than <code>curl</code>.</li>
|
||
<li><a href="http://www.httpmaster.net">HttpMaster</a> – GUI tool for
|
||
testing REST APIs and services. Windows OS only.</li>
|
||
<li><a href="https://github.com/stedolan/jq">jq</a> – Command line JSON
|
||
processor, to use in combination with a command-line HTTP client like
|
||
cURL.</li>
|
||
<li><a href="https://insomnia.rest/">Insomina</a> – A Fancy HTTP REST
|
||
Client.</li>
|
||
<li><a href="https://github.com/micha/resty">resty</a> – Little command
|
||
line REST client that you can use in pipelines (bash or zsh).</li>
|
||
<li><a href="https://testmace.com">TestMace</a> – A modern powerful
|
||
crossplatform tool for working with API and creating automated API
|
||
tests.</li>
|
||
</ul>
|
||
<h3 id="mocking">Mocking</h3>
|
||
<ul>
|
||
<li><p><a href="https://beeceptor.com">Beeceptor</a> - Beeceptor helps
|
||
intercepting API calls and mocking them selectively. Creates an endpoint
|
||
for wrapping original API and routes requests.</p></li>
|
||
<li><p><a href="https://github.com/marmelab/FakeRest">FakeRest</a> –
|
||
Patch XMLHttpRequest to fake a REST API client-side.</p></li>
|
||
<li><p><a href="http://jsonplaceholder.typicode.com/">JSON
|
||
Placeholder</a> – Free online REST service that you can use whenever you
|
||
need some fake data.</p></li>
|
||
<li><p><a href="https://github.com/typicode/json-server">json-server</a>
|
||
– Get a full fake REST API with zero coding in less than 30
|
||
seconds.</p></li>
|
||
<li><p><a href="http://www.mocky.io/">Mocky.io</a> – Free online service
|
||
to create fake HTTP responses.</p></li>
|
||
<li><p><a href="https://fakeql.com/">FakeQL</a> – Mainly focused on
|
||
GraphQL, but can mock RESTful APIs, as well.</p></li>
|
||
<li><p><a href="https://pipl.ir">PIPL API</a> – Free and public API that
|
||
generates random and fake people’s data in JSON</p></li>
|
||
<li><p><a href="https://apimocha.com">API Mocha</a> - Free online
|
||
service providing fake REST API endpoints, create customizable responses
|
||
and download rules as a Postman collection. ### Response</p></li>
|
||
<li><p><a href="https://httpstat.us">httpstat.us</a> – A super simple
|
||
service for generating different HTTP codes.</p></li>
|
||
<li><p><a href="https://httpbin.org">httpbin</a> – httpbin(1): HTTP
|
||
Request & Response Service.</p></li>
|
||
<li><p><a href="https://badssl.com">badssl</a> – Testing clients against
|
||
bad SSL configs.</p></li>
|
||
</ul>
|
||
<h2 id="documentation">Documentation</h2>
|
||
<blockquote>
|
||
<p>One of the most important part of your API is have a good
|
||
documentation and updated with the code.</p>
|
||
</blockquote>
|
||
<h3 id="free">Free</h3>
|
||
<ul>
|
||
<li><a href="https://github.com/tmcw/docbox">docbox</a>.</li>
|
||
<li><a href="https://github.com/tripit/slate">slate</a>.</li>
|
||
<li><a href="https://github.com/mpociot/whiteboard">whiteboard</a>.</li>
|
||
</ul>
|
||
<h3 id="services">Services</h3>
|
||
<ul>
|
||
<li><a href="https://docs.rapidapi.com/docs">RapidAPI</a>.</li>
|
||
<li><a href="https://readme.io/">Readme.io</a>.</li>
|
||
<li><a href="https://www.gitbook.com/">GitBook</a>.</li>
|
||
</ul>
|
||
<h2 id="logging">Logging</h2>
|
||
<ul>
|
||
<li><a href="https://pm2.keymetrics.io">PM2 by keymetrics</a>.</li>
|
||
<li><a href="https://github.com/expressjs/morgan">morgan for
|
||
expressjs</a>.</li>
|
||
<li><a href="https://www.moesif.com/features/api-logs">Moesif API
|
||
Analytics</a>. Log and Understand API Traffic.</li>
|
||
</ul>
|
||
<h2 id="modeling-and-saas">Modeling and SaaS</h2>
|
||
<blockquote>
|
||
<p>Based in DDD (Domain Driven Development). Generates automatically
|
||
API’s in different languages.</p>
|
||
</blockquote>
|
||
<ul>
|
||
<li><a
|
||
href="https://www.producthunt.com/alternatives/api-plug">Alteranatives
|
||
to API Plug</a> – 9 alternative and related products to api plug.</li>
|
||
<li><a href="https://apiary.io/">Apiary</a> – Collaborative design,
|
||
instant API mock, generated documentation, integrated code samples,
|
||
debugging and automated testing.</li>
|
||
<li><a href="https://wrapapi.com">wrapAPI, Build an API on top of any
|
||
website</a>.</li>
|
||
<li><a href="https://www.import.io/">import.io, turn web pages into
|
||
Data</a>.</li>
|
||
<li><a href="http://raml.org">RAML, RESTful API Modeling
|
||
Language</a>.</li>
|
||
<li><a href="https://www.runscope.com/">Runscope</a> – Automated API
|
||
Monitoring & Testing.</li>
|
||
<li><a href="http://swagger.io">swagger.io</a>.</li>
|
||
</ul>
|
||
<h2 id="libraries">Libraries</h2>
|
||
<blockquote>
|
||
<p>Used it to improve your workflow</p>
|
||
</blockquote>
|
||
<ul>
|
||
<li><a
|
||
href="https://github.com/microlinkhq/async-ratelimiter">async-ratelimiter</a>
|
||
– Rate limit made simple, easy, async, backed in Redis.</li>
|
||
<li><a href="https://github.com/niieani/hashids.js">hashids</a> – A
|
||
small JavaScript library to generate YouTube-like ids from numbers.</li>
|
||
<li><a href="https://github.com/jetify-com/typeid-js">typeid-js</a> –
|
||
Type-safe, K-sortable, and globally unique identifiers inspired by
|
||
Stripe IDs</li>
|
||
</ul>
|
||
<h2 id="frameworks">Frameworks</h2>
|
||
<blockquote>
|
||
<p>Designed specifically for building RESTful API’s Quickly.</p>
|
||
</blockquote>
|
||
<ul>
|
||
<li><a href="http://loopback.io">Loopback</a>.</li>
|
||
<li><a href="http://sailsjs.org">Sails.js</a>.</li>
|
||
<li><a href="https://github.com/tiangolo/fastapi">FastAPI</a>.</li>
|
||
<li><a href="https://resthapi.com">rest-hapi</a>.</li>
|
||
</ul>
|
||
<h2 id="gateways">Gateways</h2>
|
||
<blockquote>
|
||
<p>Manage API infrastructure concerns such as
|
||
authentication/authorization, rate limiting, scaling, analytics,
|
||
etc.</p>
|
||
</blockquote>
|
||
<h3 id="open-source-self-hosted">Open Source / Self-hosted</h3>
|
||
<ul>
|
||
<li><a href="http://apiumbrella.io/">API Umbrella</a>.</li>
|
||
<li><a href="http://apiaxle.com">ApiAxle</a>.</li>
|
||
<li><a href="http://krakend.io">KrakenD</a>.</li>
|
||
<li><a href="https://getkong.org/">Mashape Kong</a>.</li>
|
||
<li><a href="https://tyk.io/">Tyk</a>.</li>
|
||
<li><a href="http://wso2.com/api-management/try-it/">WSO2 API
|
||
Manager</a>.</li>
|
||
</ul>
|
||
<p><a href="https://github.com/Kikobeats/awesome-api">api.md
|
||
Github</a></p>
|