В настоящее время я разрабатываю REST Http api. (С помощью материала HATEOAS, чтобы сделать клиентов "более простыми" и избегать того, чтобы клиенты делали сложные вещи, вместо того, чтобы позволить api сказать им, что делать...)
Из-за социальной характеристики приложения, чтобы взаимодействовать с приложением, пользователи должны пройти аутентификацию, и каждый пользователь будет иметь слегка различный "вид" данных. Мы возьмем твиттер в качестве примера, это будет проще для всех.
Чтобы аутентифицировать пользователей, мы будем использовать OAuth, легко.
Итак, в клиенте (приложение ios...) случайный пользователь может увидеть список пользователей, который должен увидеть:
Adrien: Following
John: Not Following
Rambo: Not Following
И другой пользователь мог бы увидеть:
Adrien: Following
John: Not Following
Rambo: Following
Чтобы достичь этого, первое решение будет для клиента (в срок, приложение 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 это хорошая или плохая практика?