Безгражданство REST API с аутентифицированными пользователями

В настоящее время я разрабатываю REST Http API. (С HATEOAS, чтобы сделать клиентов «упрощенными» и не допускать, чтобы клиенты выполняли сложные действия, вместо того, чтобы позволять API указывать им, что делать…)

Из-за социальной характеристики приложения, чтобы взаимодействовать с приложением, пользователи должны пройти аутентификацию, и каждый пользователь будет иметь немного другое «представление» данных. В качестве примера возьмем твиттер, так будет проще для всех.

Для аутентификации пользователей мы будем использовать OAuth, это просто.

Итак, в клиенте (ios app... )случайный пользователь, возможно, увидит список пользователей, должен увидеть:

Adrien: Following
John:   Not Following
Rambo:  Not Following

И другой пользователь, возможно, увидит:

Adrien: Following
John:   Not Following
Rambo:  Following

Чтобы достичь этого, первым решением будет клиент (в терминах oauth, приложение iphone/web/etc ), чтобы получить список всех пользователей, на которых подписан аутентифицированный пользователь, и каждый раз, когда клиент отображает список,сравните каждого пользователя со списком отслеживаемых пользователей, чтобы узнать, должен ли он отображать «Не отслеживается» или «Отслеживается».

Запросы/ответы будут:

GET /users
Authorization: OAuth token...

[
  {"id": 1, "name": "Adrien"},
  {"id": 2, "name": "John"},
  {"id": 3, "name": "Rambo"}
]

и

GET /users/{myid}/following
Authorization: OAuth token...

[1, 3, 25, 1210, 9]

Это, кажется, совсем, без гражданства. Хорошо.

Что, если я хочу упростить жизнь разработчикам клиентов и встроить непосредственно в ответ списка пользователей отношения каждого пользователя относительно аутентифицированного пользователя:

GET /users
Authorization: OAuth token...

[
  {"id": 1, "name": "Adrien", "relationship": "Following"},
  {"id": 2, "name": "John", "relationship": "Not Following"},
  {"id": 3, "name": "Rambo", "relationship": "Following"}
]

Итак, вопросы:

  • Кажется, что это нарушает «безгражданство», действительно ли это нарушает ограничение безгражданства REST ?
  • Далее, как вы думаете, это хорошая или плохая практика для API?
23
задан AdrienBrault 21 July 2012 в 21:44
поделиться