В настоящее время я разрабатываю 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"}
]
Итак, вопросы: