REST
REpresentational State Transfer (also refered to as RESTful Web Services; commonly abbreviated REST) is a style of software architecture for distributed hypermedia systems such as the World Wide Web. The terms “representational state transfer” and “REST” were introduced in 2000 in the doctoral dissertation of Roy Fielding [1], one of the principal authors of the Hypertext Transfer Protocol specification. The terms have since come into widespread use in the networking community.[2]
When REST works best
It's been offered by Web Service researchers that we consider the best use-cases for REST as it may not be optimal for all data sharing, exposing and integration needs. At the same time, with its robustness and scalability limited only by the already flexible HTTP protocol it was built on, it can be fitted to satisfy most needs (though some situations may be incredibly intuitive while others may be painful, in particular SOAP infrastructure migration or certain server-side automation tasks, and high-level security or service-level authentication and authorization).
REST data (artifacts) should be living documents, like Wikipedia, rather than static editions. But like Wikipedia, they need to be "curated". Or if you prefer a different metaphor, think of them as parts of an "insight engine" for driving your business, which collectively need to be lubricated and maintained to run your business at peak performance. Based on recent assignments, I'm convinced there's a 20-30% time-to-market advantage associated with having these things up to snuff.
RESTlet founder Jérôme Louvel poses the following question you should also ask yourself, before choosing REST: "Do you want to embrace the architecture of the Web and benefit from its simplicity and scalability?" Then in that case (which sounds like most) REST is probably a good fit for you.
"To this end, what's most important to creation of a truly RESTful Web Service is having:
- a map that shows where all the data lives,
- a dictionary that explains what a piece of data (or parameter) means,
- a directory that explains how to get to the data,
- a guide that describes how routine analytics get done and associated decisions get made, and
- a library (searchable at minimum, if not indexed) that stores all of the individual bits of research (again: queries, regressions, tests, benchmarks) and conclusions you've reached in the past."
Specifications
- Roy Fielding's Thesis on REST: http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm | CH. 5 - Representational State Transfer (REST)[4]
- Relational Databases on the Semantic Web (design paper by Tim Berners-Lee on exposing Databases via HTTP): http://www.w3.org/DesignIssues/RDB-RDF.html
- Hypertext As The Engine Of Application State (HATEOAS): http://restcookbook.com/Basics/hateoas/
JAX-RS
- JAX-RS (JSR-311) : http://cwiki.apache.org/CXF20DOC/jax-rs.html
- JSR-000311 JAX-RS: The JavaTM API for RESTful Web Services(Final Release): http://jcp.org/aboutJava/communityprocess/final/jsr311/index.html
- JSR-311 Home: https://jsr311.dev.java.net/
- JAX-RS now part of J2EE 6 -- How to Combine REST Services with EJB 3.1: http://netbeans.dzone.com/articles/how-to-combine-rest-and-ejb-31
HATEOAS
Hypertext As The Engine Of Application State (HATEOAS) means that the hypertext response returned by a RESTful service/server should be used to find one's way through the application/service's RESTful API. The service navigation or "operation discovery" is provided by <link> elements and named rel attributes specifying what "operation" or "calls" are valid within a specific path. It is said by REST purists that HATEOAS is the "most RESTful option", when it comes to architecting your REST API.
- Hypertext Application Language (HAL) spec: https://stateless.co/hal_specification.html
- Link Relations: http://www.iana.org/assignments/link-relations/link-relations.xhtml
- What is HATEOAS and why is it important for my REST API?: http://restcookbook.com/Basics/hateoas/
- Roy Fielding -- REST APIs must be hypertext-driven: https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
[8] [9] [10] [11] [12] [13] [14] [15] [16]
Siren
Siren is a hypermedia specification for representing entities, commonly used in combination with HATEOS (although admittedly more commonly you see custom XML/JSON specs used with HATEOAS, and, Siren could be used on its own as well in more of a POX/POJ manner).
- Siren: https://github.com/kevinswiber/siren (the metadata format used by AEM's Asset/Content JSON model APIs)
OHM
- OHM - the mediatype for REST/HATEOAS powered by OpenAPI: https://dev.to/cbornet/ohm-the-mediatype-for-rest-hateoas-powered-by-openapi-2aba
OData
Open Data protocol for REST APIs (commonly abbreviated as OData) is an "open protocol to allow the creation and consumption of queryable and interoperable RESTful APIs in a simple and standard way", it has formats/versions that are compatible with either JSON or Atom/XML. OData aims to provide focus on your business logic while building RESTful APIs without having to worry about the various approaches to defining request & response headers, status codes, HTTP methods, URL conventions, media types, payload formats, query options, and other similar Web Service fundamentals, just to publish an API. By using OData this will be defined for you and tools are provided to help bind/publish your API in the correct format.
- OData: http://www.odata.org/[17]
- OData Validator: https://github.com/OData/ValidationTool/[18][19][20]
- OData Producers: http://www.odata.org/ecosystem/[21]
WADL
Web Application Description Language (WADL) is a port of WSDL for describing RESTful API endpoints.
- See: WADL
RAML
Restful Api Markup Language (RAML) is a machine-readable API design standard that is actually human-friendly. It is based on the YAML spec. RAML has mechanisms for the definition of HTTP-based APIs' paths, data types, sample requests, access security, creating client/server source code, and comprehensively documenting the APIs for users in a generated HTML page that is easy to read. The "R" in RAML indiicates that it is ideal for APIs which embody principles of Representational State Transfer (REST).
- RAML: http://raml.org/ | SPEC v1.0
- RAML, the RESTful API Modeling Language: https://www.sitepoint.com/raml-restful-api-modeling-language/
- Designing and Documenting Your APIs Using RAML: http://dzone.com/articles/designing-and-documenting-your-apis-using-raml[23]
OpenAPI
The OpenAPI Specification (commonly abbreviated as OAS) is an initiative to encourage public access (where possible legally/financially) and in the very least consistent documentation, accessibility and reliability for APIs. It makes use of the Swagger 2.0 specification to define a standard, language-agnostic interface to REST APIs which allows both humans and computers to discover and understand the capabilities of a specific Web Service without requiring access to source code, design documentation, or the carrying out of painstaking network-traffic inspection throughout regular usage of the API in their supported client (i.e. Wireshark while using a Desktop app, LiveHTTP Headers when accessing a WebApp, etc). When properly defined, a client/consumer can understand and interact with a remote service/device with a minimal amount of implementation logic.
Those behind OpenAPI believe that an "open description format for API services that is vendor neutral, portable and open is critical to accelerating the vision of a truly connected world".
The following image compares Swagger 2.0 spec (later referred to as OpenAPIv2) against the OpenAPIv3 spec which has made some minor structural changes to the base YAML & JSON schema descriptor formats:
- OpenAPI initiative: https://www.openapis.org/ | DOCS[24][25][26]
- OpenAPI v3.0 GUI: https://mermade.github.io/openapi-gui/ | SRC[27][28]
- OpenAPI Generator: https://github.com/OpenAPITools/openapi-generator
- OpenAPI/Swagger editor IDEs plugins: VScode | IntelliJ | Eclipse | [ NetBeans]
- Swagger 2.0 to OpenAPI 3.0.0 converter: https://mermade.org.uk/openapi-converter | SRC
[29] [30] [31] [32] [33] [34] [35]
- Swagger Core: https://github.com/swagger-api/swagger-core | DOCS (Swagger Core 2.x produces OpenAPI 3.0, whereas Swagger Core 1.x produced Swagger 2.0 spec)[36][37]
- Swagger CodeGen: https://swagger.io/tools/swagger-codegen/[38][39][40]
- Swagger Editor: https://swagger.io/tools/swagger-editor/
- SwaggerUI: https://swagger.io/tools/swagger-ui/[41][42]
- SwaggerHub: https://app.swaggerhub.com/search (basically SwaggerUI + Swagger Editor "in the cloud" or as a SaaS product)
- Swagger Inspector: https://swagger.io/tools/swagger-inspector/[43]
- Swagger Tools & Integrations: https://swagger.io/tools/open-source/open-source-integrations/
[44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60]
Swagger
Swagger is a set of tools enabling simple yet powerful representation of your RESTful API via the OpenAPI spec. With the largest ecosystem of API tooling on the planet, Swagger is used by developers in almost every modern programming language and deployment environment. With a Swagger-enabled API, you get interactive documentation, client SDK generation, discoverability, instant testability and more.
In 2015, Swagger 2.0 was donated to the OpenAPI initiative as an open source standard by SmartBear (creator of SoapUI and many other industry-leading Testing tools). Originally intended as a cleaner alternative to the other SOAP "WSDL-inspired schema formats" for describing RESTful APIs that were emerging in the 2000s-2010s such as WADL & RAML, the humble "Swagger API spec" has come a long way since it was used privately by Reverb (formerly known as "Wordnik") before its acquisition by SmartBear. Both the Swagger 2.x and more recent OpenAPI 3.x versions are now used by many of the top technology companies and Swagger tools were downloaded over 15000 times per day as of 2018.[61]
- Swagger: http://swagger.io/ | DOCS | EXAMPLE - IBM Watson API Directory
[62] [63] [64] [65] [66] [67] [68]/ [69] [70] [71]
- SwaggerHub: https://swaggerhub.com/
- SwaggerHub - Registry API: https://app.swaggerhub.com/api/swagger-hub/registry-api/ (add new endpoint Swagger definitions... also search & retrieval of Swagger definitions from SwaggerHub)
[72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108] [109] [110]
Tools
- OpenAPI tools: https://openapi.tools
- SoapUI: https://www.soapui.org/[111][112]
- Postman: https://www.getpostman.com/
- RESTClient (a Java Swing application to test RESTful webservices): http://code.google.com/p/rest-client/
- iRESTful - REST API compiler: http://irestful.net/index.html
- Chrome plugin -- Advanced REST client: https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo[113]
- FF plugin -- Live HTTP Headers: https://addons.mozilla.org/en-US/firefox/addon/live-http-headers/
- Akita -- API Observability/SRE tool: https://www.akitasoftware.com/
- httpbin -- REST WebService testing ("echo" endpoint) tool: https://httpbin.org
JAVA
- rest-client -- Java application to test RESTful webservices: http://code.google.com/p/rest-client/
RESTlet
RESTlet is a JAVA library for implementing the REST protocol. It provides the following features:
- Core REST concepts have equivalent Java classes (UniformInterface, Resource, Representation, Connector for example).
- Suitable for both client-side and server-side web applications. The innovation is that that it uses the same API, reducing the learning curve and the software footprint.
- Restlet-GWT module available, letting you leverage the Restlet API from within any Web browser, without plugins.
- Concept of "URIs as UI" supported based on the URI Templates standard. This results in a very flexible yet simple routing with automatic extraction of URI variables into request attributes.
- Tunneling service lets browsers issue any HTTP method (PUT, DELETE, MOVE, etc.) through a simple HTTP POST. This service is transparent for Restlet applications.
- Ready for the Semantic Web (Web 3.0), with built-in RDF supports being added to Restlet 1.2.
- RESTlet: http://restlet.org
RestEASY
RESTEasy is a JBoss project that provides various frameworks to help you build RESTful Web Services and RESTful Java applications.
- RESTEasy: http://www.jboss.org/resteasy/
CXF and Spring
- REST service example using CXF 2.2, JAX-RS 1.0, JAXB and Spring: http://dhruba.name/2008/12/08/rest-service-example-using-cxf-22-jax-rs-10-jaxb-and-spring/
- Currently there are two different ways to build RESTful services with CXF: http://cwiki.apache.org/CXF20DOC/restful-services.html
- Design and implement POJO Web services using Spring and Apache CXF, Part 1: Introduction to Web services creation using CXF and Spring: http://www.ibm.com/developerworks/webservices/library/ws-pojo-springcxf/index.html?ca=drs-
- Design and implement POJO Web services using Spring and Apache CXF, Part 2: Create a RESTful Web service: http://www.ibm.com/developerworks/webservices/library/ws-pojo-springcxf2/index.html
PHP
- REST Server MVC (PHPclasses): http://www.phpclasses.org/browse/package/5080.html
- REST Client: http://www.phpclasses.org/browse/package/5480.html
- Give it a REST: http://phprestsql.sourceforge.net
- RECESS - REST in PHP framework: https://github.com/recess/recess[114]
C#
- Simple REST Client (and exe sample desktop client): http://jamescrisp.org/2008/08/08/simple-rest-client/
NetKernel
1060® NetKernel™ provides a development and computing environment that is simple in concept and far-reaching in implication. The NetKernel open source community is focused on learning how to leverage and extend the technology to a wide range of fields and applications.
- NetKernel: http://www.1060.org/
Resources
- What is REST?: https://web.archive.org/web/20101125033613/http://rest.blueoxen.net/cgi-bin/wiki.pl?FrontPage (REST wiki with links to key early founding thoughts on REST)
- Implementing REST: http://code.google.com/p/implementing-rest/
- REST Best Practices - Managing Concurrent Updates (via PUT/POST): http://blog.4psa.com/rest-best-practices-managing-concurrent-updates/
- REST Security Cheat Sheet: https://www.owasp.org/index.php/REST_Security_Cheat_Sheet
- RESTful Service guide: http://ajaxpatterns.org/RESTful_Service
- Standards.REST: http://standards.rest
- This Week in REST (blog): http://thisweekinrest.wordpress.com/
- 5 Critical REST Services for Mobile Developers -- Custom Resources Endpoints, Multi-Table Update, Optimistic Locking, Pagination, Role-based Access Control: http://java.dzone.com/articles/5-critical-rest-services (convenience services for reuse in multiple projects and approaches for better Mobile App responsiveness and simplicity of development/maintenance)
- REST -- PUT .vs. POST: http://java.dzone.com/articles/put-vs-post
- David Blevins - Deconstructing REST Security (Iterate conference 2018): https://www.youtube.com/watch?v=XuhKdy7UIoY
Google REST AJAX API for "Transformers Movie" (defaults to JSON)
http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=transformers+movie
(XML and SOAP return formats no longer supported by Google Search API)
- Google (AJAX) Search REST API: http://code.google.com/apis/ajaxsearch/documentation/reference.html#_intro_fonje
Yahoo!
Yahoo! Web Search for "Transformers Movie"
http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=transformers+movie
Defaults to XML return type, for JSON append &output=json
http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=YahooDemo&query=transformers+movie&output=json
- Yahoo! Search REST API: http://developer.yahoo.com/search/rest.html
- Web Search PARAMETER Documentation for Yahoo! Search: http://developer.yahoo.com/search/web/V1/webSearch.html
Others
- NetFlix -- REST API Conventions: http://developer.netflix.com/docs/REST_API_Conventions
- OpenSocial v0.8 Restful Protocol: http://www.opensocial.org/Technical-Resources/opensocial-spec-v081/restful-protocol
- Digg API: http://apidoc.digg.com/
- European Central Bank - "Monetary exchange" rates: https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml
Tutorials
- REST for the Rest of Us: http://wiki.developer.mindtouch.com/REST/REST_for_the_Rest_of_Us
- Implementing REST Web Services -- Best Practices and Guidelines: http://www.xml.com/pub/a/2004/08/11/rest.html
- REST Web services demystified: http://www.javaworld.com/javaworld/jw-08-2012/120823-rest-web-services-demystified.html
- REST - Updating resources with HTTP PUT: https://www.mscharhag.com/api-design/updating-resources-put
- Not Just GET and POST. Use the REST of HTTP (PUT and DELETE) with Javascript: http://www.wynia.org/wordpress/2007/03/18/not-just-get-and-post-http-put-and-delete-with-javascript/
- Learn REST - A Tutorial: http://rest.elkstein.org/2008/02/real-rest-examples.html
- What is the cURL command-line syntax to do a POST request?: https://superuser.com/questions/149329/what-is-the-curl-command-line-syntax-to-do-a-post-request#149335
- Using REST in JavaScript: http://rest.elkstein.org/2008/02/using-rest-in-javascript.html
- AJAX REST tutorial: http://www.w3schools.com/Ajax/[118]
- Consuming REST in jQuery: https://spring.io/guides/gs/consuming-rest-jquery/[119]
- Javascript REST client with jQuery: http://sasajovancic.blogspot.ca/2011/06/javascript-rest-client.html
- RESTful JSON via DojoToolkit JS lib: http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/
- Make an AngularJS Library for the Imgur REST API: http://java.dzone.com/articles/make-angularjs-library-imgur
- Knockout JS REST calls: http://blog.miguelgrinberg.com/post/writing-a-javascript-rest-client
- Parse Yahoo! Web Service REST Calls with PHP: http://developer.yahoo.com/php/howto-parseRestPhp.html
- Making RESTful Requests in PHP: http://www.gen-x-design.com/archives/making-restful-requests
- Create a REST API with PHP: http://www.gen-x-design.com/archives/create-a-rest-api-with-php/
- PHP Rest Server (part 1 of 3): http://www.lornajane.net/posts/2008/php-rest-server-part-1-of-3
- PHP Rest Server (part 2 of 3): http://www.lornajane.net/posts/2008/php-rest-server-part-2-of-3/
- PHP Rest Server (part 3 of 3): http://www.lornajane.net/posts/2008/php-rest-server-part-3-of-3
- Building A RESTful PHP Server - Understanding the Request: http://www.lornajane.net/posts/2012/building-a-restful-php-server-understanding-the-request
- Building A RESTful PHP Server - Routing the Request: http://www.lornajane.net/posts/2012/building-a-restful-php-server-understanding-the-request
- Building A RESTful PHP Server - Output Handlers http://www.lornajane.net/posts/2012/building-a-restful-php-server-output-handlers
- Developing RESTful Web Services in Java EE 6 Using JAX-RS: http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/javaee6-jaxrs/RESTful_JAXRS.html
- RESTful Pet Catalog: http://blogs.sun.com/carolmcdonald/entry/a_restful_pet_catalog
- RESTful Pet Catalog download: http://weblogs.java.net/blog/caroljmcdonald/archive/2008/08/a_restful_pet_c_1.html
- RESTful Web Service With Example (JERSEY libs): https://dzone.com/articles/restful-web-service-1
- RESTful Web Services with NetBeans, Jersey and Tomcat: http://vichargrave.com/restful-web-service-development-with-netbeans-and-tomcat-tutorial/
- Getting REST Right in Spring 3.0 : http://java.dzone.com/articles/spring-30-rest-example
- Getting Started With RESTEasy and NetBeans IDE 7.1: http://java.dzone.com/articles/getting-started-resteasy-and
- From database to RESTful web service to HTML5 in 10 minutes: http://jaxenter.com/from-database-to-restful-web-service-to-html5-in-10-minutes-46064.html
- How to export Oracle database/data to REST: http://jaxenter.com/how-to-export-data-to-rest-51033.html | VIDEO
- Embedded Jetty and Apache CXF - Secure REST Services With Spring Security: http://java.dzone.com/articles/embedded-jetty-and-apache-cxf
- Create RESTful Web services with Java technology (JAX-RS): http://www.ibm.com/developerworks/library/wa-jaxrs/
- Constructing REST services with WebSphere Application Server (WAS), Part 1 -- A simple RESTful implementation: http://www.ibm.com/developerworks/websphere/techjournal/1305_gunderson/1305_gunderson.html
- Beyond REST - How to build a HATEOAS API in Java with Spring MVC, Jersey (JAX-RS) and VRaptor: http://zeroturnaround.com/rebellabs/beyond-rest-how-to-build-a-hateoas-api-in-java-with-spring-mvc-jersey-jax-rs-and-vraptor/
- A Brief Introduction to REST: http://www.infoq.com/articles/rest-introduction
- Designing "Beautiful REST + JSON APIs" by Les Hazlewood: http://java.dzone.com/articles/beautiful-rest-json-apis-les
- REST Channels - HTTP Channels with JSON support: http://cometdaily.com/2008/09/02/rest-channels-http-channels-with-json-support/
- A Distributed, Asynchronous RESTful Framework Prototype: http://dzone.com/articles/a-distributed-asynchronous-restful-microservice-pl
- RESTful API Security: https://dzone.com/articles/restful-api-security
- JAX-RS vs. Spring for REST Endpoints: https://dzone.com/articles/lets-compare-jax-rs-vs-spring-for-rest-endpoints[120]
- Developing RESTful APIs in Java with Amazon API Gateway and AWS Lambda: https://dzone.com/articles/developing-restful-apis-in-java-using-amazon-api-g
- File downloads & uploads in RESTful Web Services: https://www.mscharhag.com/api-design/rest-file-uploads-downloads
External Links
- wikipedia: Resource oriented architecture
- REST - dedicated to the understanding, the evangelism, and the advancement of the REST architectural style: http://rest.blueoxen.net/cgi-bin/wiki.pl
- What's the difference between REST & RESTful: https://stackoverflow.com/questions/1568834/whats-the-difference-between-rest-restful
- Great Series on REST and Resource-Oriented Architecture - Whether You Call it ROA or WOA, It Simply Works: http://www.mkbergman.com/?p=482
- REST APIs must be hypertext-driven: http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
- Roy Fielding -- REST APIs must be hypertext-driven (open criticism of OpenSocial API): http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
- WebServices SOAP .vs. REST: http://ajaxonomy.com/2008/xml/web-services-part-1-soap-vs-rest
- BBC Music & TV Programmes -- The URLs and a RESTful API: http://www.bbc.co.uk/music/developers#RESTful
- Robusta - Java RESTful Web Services: http://nicolas-zozol.developpez.com/tutorial/java/rest-jsp-english/
- How Amazon’s REST Compares To ("proper") REST: http://rest.blueoxen.net/cgi-bin/wiki.pl?HowAmazonsRESTComparesWithREST
- Towards RESTful PHP - 5 Basic Tips: http://www.recessframework.org/page/towards-restful-php-5-basic-tips
- PHP Web Services Without SOAP: http://www.onlamp.com/pub/a/php/2003/10/30/amazon_rest.html
- Three reasons that REST is not RPC: http://www.pluralsight.com/community/blogs/tewald/archive/2007/04/28/47067.aspx
- REST Battles SOAP for the Future of Information Services: http://blogs.zdnet.com/Newton/?p=11
- SOAP vs REST -- The war between simplicity and standards: http://devcentral.f5.com/weblogs/macvittie/archive/2008/12/05/soap-vs-rest-the-war-between-simplicity-and-standards.aspx
- REST tutorial: http://acet.rdg.ac.uk/~hrm/tutorials/rest/
- Building Web Services the REST Way: http://www.xfront.com/REST-Web-Services.html
- JAX-RS: Developing RESTful Web Services in Java: http://www.devx.com/Java/Article/42873?trk=DXRSS_JAVA
- RESTful Web Service tutorial -- An Introduction for beginners: http://viralpatel.net/blogs/2009/06/restful-web-service-tutorial-introduction-rest-restful.html
- REST is like Quantum Mechanics: http://cafe.elharo.com/web/rest-is-like-quantum-mechanics/
- REST and AJAX Reconciled: http://www.slideshare.net/lars3loff/rest-and-ajax-reconciled
- Lessons learned from getting .NET to REST with Java : http://blog.dynatrace.com/2009/08/24/lessons-learned-from-getting-net-to-rest-with-java/
- A Guide to Designing and Building RESTful Web Services with WCF 3.5: http://msdn.microsoft.com/en-us/library/dd203052.aspx
- How I Explained REST to My Wife: http://tomayko.com/writings/rest-to-my-wife
- New Technologies Accelerate and Simplify REST: http://mobile.dzone.com/articles/new-technologies-accelerate
- Is REST Successful in the Enterprise?: http://royal.pingdom.com/2010/10/15/rest-in-peace-soap/
- OPINION PIECE - RESTful Considered Harmful?: http://dzone.com/articles/restful-considered-harmful (perhaps excessive/incorrect use of REST is harmful, but overall REST helps simplify APIs and integrations)
- RESTful API Design An Opinionated Guide: http://dzone.com/articles/restful-api-design-an-opinionated-guide
- Designing Pragmatic RESTful APIs: https://www.infoq.com/presentations/design-restful-apis
- 5 Basic REST API Design Guidelines: http://blog.restcase.com/5-basic-rest-api-design-guidelines/
- 7 Rules for REST API URI Design: http://dzone.com/articles/7-rules-for-rest-api-uri-design-1
- Werner Vogel (AWS CTO) -- AWS re:Invent 2021 - 6 Rules for Good API Design: https://thenewstack.io/werner-vogels-6-rules-for-good-api-design/
- RESTful API Technology Overview: https://dzone.com/articles/restful-api-technology-overview
- REST is the new SOAP: https://medium.freecodecamp.org/rest-is-the-new-soap-97ff6c09896d
- Here’s my follow-up to REST is the new SOAP -- Let’s talk about the Original REST: https://medium.freecodecamp.org/follow-up-to-rest-is-the-new-soap-the-origins-of-rest-21c59d243438
- API Versioning Has No “Right Way”: https://blog.apisyouwonthate.com/api-versioning-has-no-right-way-f3c75457c0b7
- Richardson Maturity Model -- Steps toward the glory of REST: https://martinfowler.com/articles/richardsonMaturityModel.html
- REST API Error Handling — Problem Details Response: https://dzone.com/articles/rest-api-error-handling-problem-details-response
- RESTful API with CakePHP (2.9): https://medium.com/@classoutfit/restful-api-with-cakephp-2-9-91852c0a60ee
- RESTful Web Services -- A Tutorial: http://www.drdobbs.com/web-development/restful-web-services-a-tutorial/240169069
- Invoking REST APIs Asynchronously With Quarkus: https://dzone.com/articles/invoking-rest-apis-asynchronously-with-quarkus
- Designing a REST API — What Is a Code-First Approach?: https://dzone.com/articles/designing-rest-api-what-is-code-first-approach
- Using Spec-First API Development for Speed & Sanity: https://dzone.com/articles/using-spec-first-api-development-for-speed-and-san
- REST API Best Practices — Design Examples From Java and Spring Web Services: https://dzone.com/articles/rest-api-best-practices-with-design-examples-from
- Documenting APIs - A guide for technical writers and engineers: https://idratherbewriting.com/learnapidoc/
References
- ↑ “Architectural Styles and the Design of Network-based Software Architectures”: Dissertation for Doctor of Philosophy, by Roy Thomas Fielding
- ↑ wikipedia:REST
- ↑ Pragmalytics, Part II: http://www.octavianworld.org/octavianworld/2008/08/pragmalytics-pa.html
- ↑ Roy Fielding's Thesis - Architectural Styles and the Design of Network-based Software Architectures (see Chapter 5 on REST): http://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf
- ↑ Richardson Maturity Model: https://www.martinfowler.com/articles/richardsonMaturityModel.html
- ↑ Know how RESTful your API is -- An Overview of the Richardson Maturity Model: https://developers.redhat.com/blog/2017/09/13/know-how-restful-your-api-is-an-overview-of-the-richardson-maturity-model/
- ↑ What is the Richardson Maturity Model?: https://nordicapis.com/what-is-the-richardson-maturity-model/
- ↑ wikipedia: HATEOAS
- ↑ REST HATEOAS - How does the client know link semantics?: https://stackoverflow.com/questions/24656177/rest-hateoas-how-does-the-client-know-link-semantics?rq=1
- ↑ REST, Hypermedia & HATEOAS: https://developer.paypal.com/docs/integration/direct/paypal-rest-payment-hateoas-links/
- ↑ HATEOAS and the PayPal REST Payment API: https://developer.paypal.com/docs/integration/direct/paypal-rest-payment-hateoas-links/
- ↑ On-Demand Webinar -- Making Sense of Hypermedia APIs - Hype or Reality: https://www.roguewave.com/events/on-demand-webinars/making-sense-of-hypermedia-apis/thank-you
- ↑ Why I Hate HATEOAS: http://jeffknupp.com/blog/2014/06/03/why-i-hate-hateoas/
- ↑ Hypermedia APIs (using xHTML parser & <link rel="CONTEXT" />): https://vimeo.com/20781278
- ↑ Introduction to Hypermedia REST APIs (HATEOAS): https://www.mscharhag.com/api-design/hypermedia-rest
- ↑ HATEOAS without links (possible but non-standard): https://www.mscharhag.com/api-design/rest-hateoas-without-links
- ↑ OData icon usage: http://www.odata.org/odata-icon-usage-guidelines/
- ↑ Python CLI OData Validator: https://github.com/DMTF/Redfish-Tools/tree/master/odata-csdl-validator
- ↑ New version of OData Validator: http://www.odata.org/blog/odata-service-validation-tool/
- ↑ OData Validator (SLIDES): https://interopevents.com/uploads/1477122669384-OData%20Validator.pdf
- ↑ Testing and Consuming OData Services using Fiddler, LinqPad, Excel and SharePoint: http://www.dotnetcurry.com/sharepoint/882/testing-consuming-odata-fiddler-excel-sharepoint
- ↑ Understand OData in 6 steps: http://www.odata.org/getting-started/understand-odata-in-6-steps/
- ↑ A RAML / APIHub Plugin for SoapUI: http://olensmar.blogspot.ca/2013/12/a-raml-apihub-plugin-for-soapui.html
- ↑ wikipedia: Open API
- ↑ wikipedia: List of open APIs
- ↑ Planning Your API Strategy for 2018 -- Tools and Resources to Set Your Team Up for Success: https://swagger.io/blog/api-tools-and-resources/
- ↑ OpenAPI Generator: https://openapi-generator.tech/ | SRC
- ↑ The OpenAPI 3.0 GUI: https://dzone.com/articles/the-openapi-30-gui
- ↑ Tutorial - Converting your Swagger 2.0 API Definition to OpenAPI 3.0: https://blog.runscope.com/posts/tutorial-upgrading-swagger-2-api-definition-to-openapi-3
- ↑ What Is the Difference Between Swagger and OpenAPI?: https://swagger.io/blog/api-strategy/difference-between-swagger-and-openapi/
- ↑ Convert Swagger 2.0 to OpenAPI 3.0: https://dev.to/derberg/convert-swagger-2-0-to-openapi-3-0-3joj
- ↑ Migrating to OpenAPI 3.0 -- How to Convert (migrate) Your Existing APIs with Swagger Tools: https://swagger.io/resources/webinars/convert-api-to-oas-3-with-swagger-tools/
- ↑ How to convert OpenAPI 2.0 to OpenAPI 3.0?: https://stackoverflow.com/questions/59749513/how-to-convert-openapi-2-0-to-openapi-3-0
- ↑ Migration from Swagger 2 to OpenAPI 3: https://medium.com/javarevisited/migration-from-swagger-2-to-openapi-3-391f3e97da73
- ↑ Convert Swagger to OpenAPI using "swagger2openapi" playground: https://github.com/derberg/convert-swagger-to-openapi-playground (use command swagger2openapi --yaml --outfile ALC-openapi.json ALC-openapi.yaml)
- ↑ Add Swagger/OpenAPI to Your Existing APIs: How to Automate a "Code First" Approach to OAS at Scale: https://swagger.io/resources/webinars/automate-code-first-approach-swagger/
- ↑ Annotation Libraries for Generating OAS (And Other FAQs from Swagger Users): https://swagger.io/blog/api-development/swagger-annotation-libraries/
- ↑ Swagger Codegen (with maven plugin) for OpenAPI 3.0: https://stackoverflow.com/questions/49616529/swagger-codegen-with-maven-plugin-for-openapi-3-0
- ↑ Tutorial -- Coding a Swagger CodeGen Project: https://help.vertafore.com/devportal/content/howto/tutorial2_codingswaggercodegenproject.htm
- ↑ Swagger codegen tutorial example: https://howtodoinjava.com/swagger2/code-generation-for-rest-api/
- ↑ Interactive API documentation using Swagger UI deployed with Terraform: https://advancedweb.hu/interactive-api-documentation-using-swagger-ui-deployed-with-terraform/
- ↑ SwaggerUI and auto-generating API docs from PHP based Application endpoints: https://technotzz.wordpress.com/2018/03/09/swagger-ui-for-php-based-applications/
- ↑ Looking to Create OpenAPI 3.0 For Your API? Swagger Inspector Has Your Back: https://swagger.io/blog/news/looking-to-create-openapi-3-0-for-your-api-swagger/
- ↑ Documenting a Spring REST API Using OpenAPI 3.0: https://www.baeldung.com/spring-rest-openapi-documentation
- ↑ Postman Supports OpenAPI 3.0: http://blog.getpostman.com/2018/12/11/postman-supports-openapi-3-0/
- ↑ Describing Request Body: https://swagger.io/docs/specification/describing-request-body/
- ↑ Quick manual way to create an OpenAPI spec from a GET API Request: https://dzone.com/articles/a-quick-manual-way-to-create-an-openapi-from-a-get
- ↑ Adopting a Design-First Approach with OAS 3.0 & Swagger: https://swagger.io/resources/webinars/adopting-a-design-first-approach/#adopting-design-first (and how to annotate/document legacy APIs)
- ↑ .NET Core with Swagger and C# Client: https://www.youtube.com/watch?v=TEdwxI0EGYg | DOCS | SRC
- ↑ Automatically Generating your API Client with Swagger and Swagger Codegen, by Jesse Collis: https://www.youtube.com/watch?v=EzKwi-u9jQo
- ↑ Spotting mismatches between your spec and your REST-API with hikaku: https://blog.codecentric.de/en/2019/03/spot-mismatches-between-your-spec-and-your-rest-api/
- ↑ Swagger/OpenAPI @ApiParam vs @ApiModelProperty: https://www.baeldung.com/swagger-apiparam-vs-apimodelproperty
- ↑ Doing More With Springdoc-OpenAPI: https://dzone.com/articles/doing-more-with-springdoc-openapi | SRC
- ↑ Postman Joins the OpenAPI Initiative: https://blog.postman.com/postman-joins-openapi-initiative/
- ↑ API Security -- Issue #88 - JWT pentesting, API discovery, the present and future of OpenAPI: https://apisecurity.io/issue-88-jwt-pentesting-api-discovery-present-future-openapi/
- ↑ API Scanning with Burp Suite: https://portswigger.net/blog/api-scanning-with-burp-suite
- ↑ Creating High Quality OpenAPI spec (OAS) Definitions with .Net Core https://42crunch.com/creating-high-quality-oas-definitions-with-net-core/
- ↑ What’s New in OpenAPI 3.1 - JSON Schema & WebHooks: https://www.openapis.org/blog/2020/12/15/from-apidays-paris-openapi-3-1-coming-soon
- ↑ Analyzing Trends Across 200,000 OpenAPI Files: https://nordicapis.com/analyzing-trends-across-200000-openapi-files/
- ↑ Creating (i.e. Reverse Engineering) an OpenAPI spec from application HTTP Traffic: https://apisyouwonthate.com/blog/creating-openapi-from-http-traffic
- ↑ Introducing the Open API Initiative!: http://swagger.io/introducing-the-open-api-initiative/
- ↑ Visual OpenAPI (Swagger-compatible) API builder: https://apibldr.com/
- ↑ Chrome extension - SwaggerUI preview: https://chrome.google.com/webstore/detail/swagger-ui-console/ljlmonadebogfjabhkppkoohjkjclfai
- ↑ Swagger + SoapUI = true: http://olensmar.blogspot.ca/2013/05/soapui-swagger-true.html (true API testing/integration ease)
- ↑ Import swagger definition to SoapUI free?: https://stackoverflow.com/questions/35398889/import-swagger-definition-to-soapui-free#35412319
- ↑ (SOAP UI) REST Discovery - API with internal browser: https://www.soapui.org/rest-testing-discovery/rest-discovery---api-with-internal-browser.html (manually record your Swagger API sample requests to create SOAP UI re-runnable tests)
- ↑ Ready! API Plugin for importing Swagger definitions as REST Services: http://github.com/SmartBear/readyapi-swagger-plugin
- ↑ Swagger OSS Tools & Integrations: https://swagger.io/open-source-integrations/
- ↑ Swagger - DIFF: https://github.com/civisanalytics/swagger-diff (Utility for comparing two Swagger specifications)
- ↑ Introducing Swagger Brake: https://blog.arnoldgalovics.com/introducing-swagger-brake/
- ↑ Integrating Swagger Brake into Maven/Gradle projects: https://blog.arnoldgalovics.com/integrating-swagger-brake-into-maven-gradle-projects/
- ↑ SwaggerHub: https://smartbear.com/product/swaggerhub/overview/
- ↑ SwaggerHub -- Registry API - Integration: https://smartbear.com/product/swaggerhub/integration/
- ↑ Integrating with the SwaggerHub API: http://swagger.io/integrating-with-the-swaggerhub-api/
- ↑ Converting a Swagger YAML file to JSON from the command line: http://stackoverflow.com/questions/34733253/converting-a-swagger-yaml-file-to-json-from-the-command-line#34776563
- ↑ SwaggerHub - API Auto Mocking Integration: https://app.swaggerhub.com/help/integrations/api-auto-mocking (only available on SwaggerHub)
- ↑ Swagger 101 -- Writing Swagger definitions: https://app.swaggerhub.com/help/tutorials/writing-swagger-definitions
- ↑ Swagger -- Documenting Existing APIs (and their request/response formats): http://swaggerhub.com/wp-content/uploads/2017/02/Documenting-An-Existing-API-with-Swagger-2.pdf
- ↑ Introducing Projects -- A Better Way to Organize Your APIs in SwaggerHub: https://swaggerhub.com/blog/swaggerhub-feature/swaggerhub-projects/
- ↑ A Visual Guide to What's New in Swagger 3.0: https://blog.readme.io/an-example-filled-guide-to-swagger-3-2/
- ↑ OpenAPI / Swagger Resource List for API Developers: https://blog.runscope.com/posts/openapi-swagger-resource-list-for-api-developers
- ↑ Swagger-Core Annotations: https://github.com/swagger-api/swagger-core/wiki/Annotations-1.5.X
- ↑ Eclipse Plugin -- KaiZen-OpenAPI-Editor: https://github.com/RepreZen/KaiZen-OpenAPI-Editor
- ↑ Swagger markup in a Servlet (EXAMPLE): https://github.com/swagger-api/swagger-samples/blob/master/java/java-servlet/src/main/java/io/swagger/sample/servlet/SampleServlet.java
- ↑ How to integrate Swagger with Pure Servlet?: https://stackoverflow.com/questions/46460659/how-to-integrate-swagger-with-pure-servlet
- ↑ Swagger Documentation for Servlet: https://prabhukvn.com/2016/02/24/swagger-documentation-for-servlet/
- ↑ Generating Rest API documentation using Swagger or any other tool: https://stackoverflow.com/questions/19209926/generating-rest-api-documentation-using-swagger-or-any-other-tool
- ↑ How to create Swagger docs (manual example, using SwaggerUI statically): https://www.youtube.com/watch?v=xggucT_xl5U
- ↑ Swagger tutorial -- How to add Swagger OpenAPI to your REST API documentation: https://www.youtube.com/watch?v=wC5hxY0RItQ
- ↑ Generate client stubs & document your REST-API using Swagger & Spring: https://www.youtube.com/watch?v=43GhBbP--oI
- ↑ Simplified Spring Swagger project example: https://dzone.com/articles/simplified-spring-swagger (SpringFox lib)
- ↑ How to configure Swagger to generate Restful API Doc for your Spring Boot Web Application: https://dzone.com/articles/how-configure-swagger-generate
- ↑ How to document your JAX-RS API using Swagger, WAS Liberty Profile and Bluemix?: http://www.mycloudtips.com/2014/10/jax-rs-swagger-liberty-bluemix.html
- ↑ RESTful API Documentation Using Swagger and Spring MVC: https://www.3pillarglobal.com/insights/restful-api-documentation-using-swagger-and-spring-mvc
- ↑ Usage of Swagger 2.0 in Spring Boot Applications to document APIs: http://dzone.com/articles/usage-of-swagger-20-in-spring-boot-applications-to
- ↑ Can Swagger be used for SOAP?: https://stackoverflow.com/questions/25777601/can-swagger-be-used-for-soap
- ↑ REST enable your SOAP services (and document it with Swagger/OpenAPI) using DreamFactory: http://blog.dreamfactory.com/rest-enable-your-soap-services-with-dreamfactory
- ↑ How to integrate Swagger with Maven + Java + Jersey +Tomcat: https://stackoverflow.com/questions/25776968/how-to-integrate-swagger-with-maven-java-jersey-tomcat
- ↑ Swagger 2.0 - Maven plugin: https://github.com/swagger-maven-plugin/swagger-maven-plugin (JAX-RS & SpringMVC supported maven build plugin, helps you generate Swagger JSON and API document in build phase)
- ↑ Swagger 2.0 - Maven plugin example: https://github.com/swagger-maven-plugin/swagger-maven-example (example of using swagger-maven-plugin)
- ↑ Adding Swagger to Spring Boot: https://dzone.com/articles/adding-swagger-to-spring-boot
- ↑ Java/Spring -- How to Generate an Entire Swagger Documented CRUD REST API With Speedment: https://dzone.com/articles/javaspring-how-to-generate-an-entire-swagger-docum
- ↑ Javalin - Documenting endpoints with OpenAPI 3: https://javalin.io/tutorials/openapi-example
- ↑ Awesome APIs with Kotlin, Spring 5 and Swagger: https://medium.com/@cdimascio/awesome-apis-with-kotlin-spring-5-and-swagger-2687312a5270
- ↑ OpenAPI generator: https://github.com/OpenAPITools/openapi-generator | DOCS | Config Options for kotlin-spring
- ↑ OpenAPI generation for Kotlin in the Ktor plugin and website: https://ktor.io/blog/2018/08/openapi-gen.html
- ↑ Swagger for Kotlin: https://stackoverflow.com/questions/45304421/swagger-for-kotlin
- ↑ Simplifying API Pentesting With Swagger import files in "Burp Suite": https://rhinosecuritylabs.com/application-security/simplifying-api-pentesting-swagger-files/
- ↑ How to Turn Off Swagger-ui in Production: https://www.baeldung.com/swagger-ui-turn-off-in-production
- ↑ OpenAPI Specification 3.1.0 now available: https://sdtimes.com/api/openapi-specification-3-1-0-now-available/ (JSON Schema, a new top-level element for describing Webhooks, support for identifying API licenses using SPDX identifier; PathItems object now optional, simplifying "reusable component" library creation)
- ↑ Getting Started with REST Testing in SoapUI: https://www.soapui.org/rest-testing/getting-started.html
- ↑ Example REST Test in SoapUI : https://www.soapui.org/tutorials/rest-sample-project.html
- ↑ Google Chrome - 3rd party Advanced Rest Client (ARC) test tool: https://www.advancedrestclient.com/
- ↑ RECESS former official website: http://www.recessframework.org/ (OFFLINE)
- ↑ Michal’s PI tips - Exchange Rates from an XML file on a web page – REST, AXIS: https://blogs.sap.com/2012/01/05/michals-pi-tips-exchange-rates-from-an-xml-file-on-a-web-page-rest-axis/ | DEMO (lightweight replacement for old WebserviceX CurrencyConverter)
- ↑ Fixer: https://fixer.io/quickstart ("EURO" as default base RESTful currency exchange rates)
- ↑ OpenExchangeRates: https://openexchangerates.org/ | DOCS ("USD" as default base)
- ↑ Do you really need jQuery: http://www.sitepoint.com/do-you-really-need-jquery/
- ↑ jQuery - Shorthand AJAX methods: http://api.jquery.com/category/ajax/shorthand-methods/
- ↑ Calling REST API in Java: https://marketing.adobe.com/developer/blog/calling-rest-api-in-java (Omniture API example)
See Also
API | Web Services | SOAP | SOA | Security | Optimization