RESTful API должен быть полностью обнаруживаемым и автоматически документироваться.Вам нужен только URL, а все остальное, связанное с ним, должно описывать себя.Звучит как утопия, но это возможно.
Например, давайте начнем с примера URL, похожего на stackoverflow: http://restfuloverflow.com (иллюстративный)
Первое, что вы делаете на ресурсе RESTful, - это запрос OPTIONS.Вы всегда должны включать заголовок Accept, чтобы сервер отвечал на наиболее подходящий тип MIME:
OPTIONS * HTTP/1.1
Accept: text/html, text/xml, application/json
Host: restfuloverflow.com
Сервер должен проинструктировать клиента о том, что можно сделать с этим URL:
HTTP/1.1 200 Ok
Allow: GET, POST, PUT, DELETE, OPTIONS, TRACE, PATCH
Это API RESTful, сообщающий, что данный сервис поддерживает эти методы.Первый, который вы попробуете, будет похож на запрос ниже.Пользователь, использующий API с помощью браузера, должен работать аналогичным образом.
GET / HTTP/1.1
Accept: text/html, text/xml, application/json
Host: restfuloverflow.com
Затем сервер должен вернуть некоторые ссылки, указывающие на связанные ресурсы, если они доступны:
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>
В HTML-версии должны использоваться ссылки <a>
, а в ответах JSON должна использоваться JSON-Атрибут Схема links
.
Допустим, клиент теперь решает, что он хочет знать, что делать с вопросами:
OPTIONS /questions HTTP/1.1
Host: restfuloverflow.com
Accept: text/html, text/xml, application/json
Возможный ответ может быть:
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>
Что ж,Сервер сказал нам, что можно получить и отправить новый вопрос.Он также рассказал нам, как выглядит вопрос в XML, предоставив XML-схему.JSON-SCHEMA может быть предоставлена для JSON, а в HTML может быть предоставлена форма для новых вопросов.
Допустим, пользователь хочет получить вопросы:
GET /questions HTTP/1.1
Host: restfuloverflow.com
Accept: text/html, text/xml, application/json
Затем сервер отвечает:
HTTP/1.1 200 Ok
Content-Type: text/xml
<?xml version="1.0">
<questions>
<link href="/questions/intersting" title="Intersting Questions"/>
<link href="/questions/hot" title="Hot Questions"/>
</questions>
Теперь все снова связано.Дело идет так, как описывает сама служба. Netflix API следует аналогичным принципам, но не имеет некоторых функций автоматического обнаружения.
Этот API-интерфейс правительства Бразилии описывает себя с использованием RDF.Это один из лучших образцов RESTful, которые я когда-либо видел.Попробуйте изменить .rdf на .xml, .json или .html.(Это все на португальском языке, извините за это.)
Лучший инструмент для API RESTful в PHP - это Respect \ Rest .Он имеет большую часть рабочего процесса, который я описал здесь, уже загружен, и появляются новые функции (он все еще в версии 0.4x).
Стоимость создания системы документирования для приложений RESTful такая же, как и созданиеRESTful приложение.Вот почему таких инструментов так мало, и обычно они не так хороши.