Una API REST debe ser totalmente visible y auto-documentado. Solo necesita una URL y todo lo demás vinculado a ella debe describirse a sí mismo. Suena como una utopía, pero es factible.
Por ejemplo, vamos a empezar con un ejemplo de URL stackoverflow como: http://restfuloverflow.com (ilustrativo)
El primero que se hace en un recurso REST es una solicitud de OPCIONES.Siempre hay que incluir un Acepta el encabezado para indicar al servidor para responder al tipo mime más apropiado:
OPTIONS * HTTP/1.1
Accept: text/html, text/xml, application/json
Host: restfuloverflow.com
El servidor debe indicar al cliente en lo que es posible hacer en ese URL:
HTTP/1.1 200 Ok
Allow: GET, POST, PUT, DELETE, OPTIONS, TRACE, PATCH
Esta es la API RESTful que le indica que este servicio admite estos métodos. El primero que probará es algo así como la solicitud a continuación. Un usuario que golpea la API con un navegador debería funcionar de manera similar.
GET/HTTP/1.1
Accept: text/html, text/xml, application/json
Host: restfuloverflow.com
continuación, el servidor debe devolver algunos enlaces que apuntan a recursos relacionados, si está disponible:
HTTP/1.1 200 Ok
Content-Type: text/xml
<?xml version="1.0">
<qa>
<link href="/questions" title="Questions"/>
<link href="/tags" title="Tags"/>
<link href="/users" title="Users"/>
</qa>
una versión HTML debe utilizar <a>
enlaces, y las respuestas JSON debe utilizar JSON-Esquema links
atributo.
Digamos que el cliente ahora decide que quiere saber qué hacer con las preguntas:
OPTIONS /questions HTTP/1.1
Host: restfuloverflow.com
Accept: text/html, text/xml, application/json
Una posible respuesta podría ser:
HTTP/1.1 200 Ok
Allow: GET, POST
Content-Type: text/xml
<?xml version="1.0">
<xsd:element name="question">
<!-- XML Schema describing a question -->
</xsd:element>
Pues bien, el camarero nos dijo que es posible GET y POST una nueva pregunta. También nos dijo cómo se ve una pregunta en XML al proporcionar un esquema XML. Se podría proporcionar un JSON-SCHEMA para JSON, y en HTML se podría proporcionar un formulario para nuevas preguntas.
Digamos que el usuario quiere obtener las preguntas:
GET /questions HTTP/1.1
Host: restfuloverflow.com
Accept: text/html, text/xml, application/json
A continuación, el servidor responde:
HTTP/1.1 200 Ok
Content-Type: text/xml
<?xml version="1.0">
<questions>
<link href="https://stackoverflow.com/questions/intersting" title="Intersting Questions"/>
<link href="https://stackoverflow.com/questions/hot" title="Hot Questions"/>
</questions>
Ahora, todo está vinculado de nuevo. La cosa continúa de una manera que el servicio se describe a sí mismo. El Netflix API sigue principios similares, pero carece de algunas características de autodescubrimiento.
This Brazillian Government API se describe a sí mismo usando RDF. Es una de las mejores muestras RESTful que he visto en mi vida. Intenta cambiar .rdf por .xml, .json o .html. (Todo está en portugués, lo siento por eso).
La mejor herramienta para API RESTful en PHP es Respect\Rest. Tiene la mayor parte del flujo de trabajo que he descrito aquí ya iniciado, y vienen nuevas características (todavía está en la versión 0.4x).
El costo de construir un sistema de documentación para aplicaciones RESTful es el mismo que construir una aplicación RESTful. Esta es la razón por la que hay tan pocas herramientas como esa y, por lo general, no son tan buenas.
Relacionados con [este] (http://stackoverflow.com/questions/2756978/how-to-document-a-symfony-based-rest-api-similar-to-enunciates-documentation-c/12609606 # 12609606) y [este otro] (http://stackoverflow.com/questions/8872276/auto-generate-rest-api-docs-from-symfony?rq=1), aunque este último parece engañar al primero. – Patrick