'''''RESTful''''' (REpresentationalrepresentational Statestate Transfertransfer) '''''API''''' (Applicationapplication Programmingprogramming Interfaceinterface) '''''DLs''''' (Descriptiondescription Languageslanguages) are [[formal language]]s designed to provide a structured description of a [[REST]]ful [[web API]] that is useful both to a human and for automated machine processing. API Descriptiondescription Languageslanguages are sometimes called [[interface description language]]s (IDLs). The structured description might be used to generate documentation for human [[programmer]]s; such documentation may be easier to read than free-form documentation, since all documentation generated by the same tool follows the same formatting conventions. Additionally, the description language is usually precise enough to allow automated generation of various software artifacts, like libraries, to access the API from various programming languages, which takes the burden of manually creating them off the programmers.<ref>{{Cite book |last1=Zhai |first1=Juan |last2=Huang |first2=Jianjun |last3=Ma |first3=Shiqing |last4=Zhang |first4=Xiangyu |last5=Tan |first5=Lin |last6=Zhao |first6=Jianhua |last7=Qin |first7=Feng |title=Proceedings of the 38th International Conference on Software Engineering |chapter=Automatic model generation from documentation for Java API functions |date=2016-05-14 |chapter-url=https://doi.org/10.1145/2884781.2884881 |series=ICSE '16 |___location=New York, NY, USA |publisher=Association for Computing Machinery |pages=380–391 |doi=10.1145/2884781.2884881 |isbn=978-1-4503-3900-1|s2cid=2733669 }}</ref>
==History==
There are two previous major description languages: [[Web Services Description Language|WSDL2WSDL 2.0]] (Web Services Description Language) and [[Web Application Description Language|WADL]] (Web Application Description Language). Neither is widely adopted in the industry for describing RESTful APIs, citing poor human readability of both and WADL being actually unable to fully describe a RESTful API.<ref name="slideshare.net">{{Cite web|url=http://www.slideshare.net/SOA_Software/api-description-languages|title = API Description Languages|date = 12 August 2014}}</ref>
==AlternativesPrinciple==
===Hypertext-driven APIsAPI===
AnThe alternativeprinciple approach tobehind building RESTful APIs is known under the acronym HATEOAS ([[Hypermedia as the Engine of Application State]]). In this approach, the client software is not written to a static interface description shared through documentation. Instead, the client is given a set of entry points and the API is discovered dynamically through interaction with these endpoints. HATEOAS was introduced in [[Roy Fielding]]'s doctoral thesis ''Architectural Styles and the Design of Network-based Software Architectures''. HATEOAS hasis beenone of the original vision for RESTful APIskey whichelements distinguisheddistinguishing themREST from [[Remote Procedure Call|RPC]] mechanisms.<ref>{{cite web|last1=Fielding|first1=Roy|title=REST APIs must be hypertext-driven|url=http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven|accessdate=4 November 2015}}</ref>
==List of RESTful API DLs==
<!-- Name, URL, Developer, Note, Refs -->
*[[Web Services Description Language]] (WSDL)
*[[Hydra (specification)|Hydra]]
*[[Web Application Description Language]] (WADL)
*[[CloudRail]]
**URL: http://cloudrail.com/
**developer: licobo GmbH
*[[Google Cloud Platform#Products|Google Cloud Endpoints]]
**URL: https://cloud.google.com/endpoints/, https://developers.google.com/discovery
**developer: [[Google]]
*[[Open Data Protocol]] (OData)
**[[OASIS (organization)|OASIS]] standard<ref>{{cite web|title=OASIS Open Data Protocol (OData) TC - OASIS|url=https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=odata}}</ref>
**URL: http://www.odata.org/
**developer: [[Microsoft]]
*[[OpenAPI Specification]]
**URL: https://openapis.org/
**developer: Open API Initiative (OAI)
*[[RESTful Service Description Language]] (RSDL)
**URL: http://www.balisage.net/Proceedings/vol10/html/Robie01/BalisageVol10-Robie01.html
**developer: Michael Pasternak
*Hydra Core Vocabulary (Hydra)
**URL: http://www.hydra-cg.com/spec/latest/core/
**developer: Hydra W3C Community Group, http://www.hydra-cg.com/
*[[RESTful API Modeling Language]] (RAML)
**URL: http://raml.org/
**developer: Mulesoft, http://www.mulesoft.com/
*Hypermedia
*API Blueprint
**URL: https://apiblueprint.org/
**developer Apiary, https://apiary.io/company
*I/O Docs
**URL: https://github.com/mashery/iodocs
**developer: Mashery, http://www.mashery.com/
*[[Apache Avro]]
*Barrister
**URL: http://barrister.bitmechanic.com/
**developer: James Cooper<ref>{{cite web|title=Barrister RPC - About|url=http://barrister.bitmechanic.com/about.html}}</ref>
*SERIN - Semantic Restful Interfaces<ref>{{Cite journal|last=Lira|first=Hermano Albuquerque|last2=Dantas|first2=Jose Renato Villela|last3=Muniz|first3=Bruno de Azevedo|last4=Nunes|first4=Tadeu Matos|last5=Farias|first5=Pedro Porfirio Muniz|date=2015-01-01|title=An Approach to Support Data Integrity for Web Services Using Semantic RESTful Interfaces|url=http://doi.acm.org/10.1145/2740908.2743042|journal=Proceedings of the 24th International Conference on World Wide Web|series=WWW '15 Companion|___location=New York, NY, USA|publisher=ACM|pages=1485–1490|doi=10.1145/2740908.2743042|isbn=9781450334730}}</ref>
**URL: http://www.semanticinterface.org
**developers: Bruno Muniz, Hermano Lira, José Renato Villela Dantas, Tadeu Nunes, Laura Chaves, Julio Cesar Campos Neto, Pedro Porfírio Muniz Farias
==List of data description languages==
A significant part of RESTful API description is the specification of returned data structures. The IDL might either specify its own format or use an existing data description format. A notable example which many RESTful API DLs use is [[JSON Schema]].
*json:api
**http://jsonapi.org/
**Started as REST adapter for [[Ember.js|Ember]] Data
*JSON Schema
**used by OpenAPI, Google APIs Discovery,<ref>https://developers.google.com/discovery/v1/reference/apis</ref> I/O Docs
*Apache Avro
**https://avro.apache.org/
**both Interface Description Language and data description language
*JSON-RPC 2.0
**used by Barrister
==Comparison of RESTful API DLs==
The community around RESTful API DLs is vibrant{{citation needed|date=September 2015}} and the landscape is still changing. According to a presentation by Akana, the most active projects in this area are OpenAPI, RAML and API Blueprint.<ref name="slideshare.net"/>
{| class="wikitable sortable" style="text-align: center; font-size: 85%; width: auto; table-layout: fixed;"
|-
! style="width: 12em" |
! Sponsor
! Initial commit
! Latest stable release
! Stable release date
! Software license<ref name="license">Licenses here are a summary, and are not taken to be complete statements of the licenses. Some packages may use libraries under different licenses.</ref>
! Format
! Open Source
! Code generation (client)
! Code generation (server)
|-
| {{rh}} | [[RAML (software)|RAML]]
| [[MuleSoft]]
| September, 2013
| 1.0
| May 16, 2016
| [[Apache 2.0]]
| [[YAML]]
| {{Yes}}
| {{Yes}}
| {{Yes}}
|-
| {{rh}} | [[API Blueprint]]
| [[Apiary]]
| April, 2013
|
|
| [[MIT]]
| [[Markdown]]
| {{Yes}}
| limited
| {{Yes}}
|-
| {{rh}} | [[OpenAPI Specification|OpenAPI]]
| Open API Initiative (OAI)
| July, 2011
| 2.0
|September 6, 2014
| [[Apache 2.0]]
| [[JSON]] or [[YAML]]
| {{Yes}}
| {{Yes}}
| {{Yes}}
|-
|SERIN
|UNIFOR
|2011
|2.0
|dec,2014
|Creative Commons
|RDF
|yes
|no
|yes
|}
== Frameworks ==
Many server frameworks interoperate with one or more IDLs.
*Gugamarket REST API framework
**IDLs: OpenAPI
**URL: https://pliik.github.io/gugamarket/
**developer: https://github.com/pliik
==References==
{{Reflist}}
==External links==
*[http://www.mayerdan.com/programming/2014/01/29/investigating-api-tooling/ Investigating Api Developer Tooling]
[[Category:Cloud standards]]
|