Что делает Flickr API не RESTful? - PullRequest
4 голосов
/ 05 февраля 2010

Я собираюсь начать разработку REST API для веб-сайта клиента, и я провел некоторое исследование. Я наткнулся на этот полезный вопрос о золотом стандарте для API.

До прочтения этого поста я думал об использовании Flickr API в качестве ориентира. Однако этот комментарий к вышеупомянутому вопросу заставил меня задуматься дважды:

The Flickr API is particularly hilarious, for example. It advertises itself as RESTful and yet is nothing of the sort! - Натан

Меня особенно интересует, что делает Flickr API не RESTful и что влияет на эти элементы RESTful.

Ответы [ 2 ]

6 голосов
/ 05 февраля 2010

Другая важная причина, по которой этот API будет считаться не подходящим, заключается в том, что он не использует «гипертекст». Гипертекст просто использует ссылки (и отношения ссылок) для перемещения клиентов в ваших приложениях, вместо того, чтобы требовать от них программно «конструировать» URI.

Это не RESTful:

GET / коллекция
200 ОК

<collection>
  <item>
    <id>1</id>
  </item>
</collection>

Это RESTful:

GET / коллекция
200 ОК

<collection>
  <item href="/collection/1" />
</collection>

Преимущество последнего подхода RESTful заключается в том, что ваш сервер может перемещать ресурс элемента в любое место, например, например. переместите его в / item / 1 - измените значение href и знайте, что все клиенты будут управлять изменением. Первый подход не способен на это, потому что сервер не может гарантировать, что все клиенты подтвердят изменение; это часть того, что называется связыванием клиент-сервер, и в больших распределенных системах, где в вашем API много клиентов, вы хотите свести это к минимуму - это основная цель REST.

Рой Филдинг называет эту часть REST «ограничением гипертекста», и он написал об этом следующее сообщение в блоге:

http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

4 голосов
/ 05 февраля 2010
  • Неправильное использование глаголов HTTP: Flicker использует глагол «заменить» вместо HTTP PUT в http://api.flickr.com/services/replace/. Другой пример: http://api.flickr.com/services/rest/?method=flickr.test.echo&name=value «method» должен быть одним из методов HTTP (в данном случае GET).
  • Flicker неправильно использует коды состояния HTTP.
  • Аутентификация не является RESTful
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...