2

Я разработчик API в своей компании. Мы развиваем социальную сеть. Мы используем систему дружбы. Мы используем API-ориентированную систему. Апи, которую я напишу, будет использоваться каждой платформой, которую мы разрабатываем.RESTful URL-дизайн для системы дружбы

я классически есть ресурс пользователя, и я использую таблицу приятельств отслеживать дружбу:

+-----------+------------------+------+-----+---------------------+----------------+ 
| Field  | Type    | Null | Key | Default    | Extra   | 
+-----------+------------------+------+-----+---------------------+----------------+ 
| id  | int(10) unsigned | NO | PRI | NULL    | auto_increment | 
| sourceId | int(11)   | NO | MUL | NULL    |    | 
| targetId | int(11)   | NO |  | NULL    |    | 
| status | tinyint(1)  | NO |  | 0     |    | 
| seen  | tinyint(1)  | NO |  | 0     |    | 
| createdAt | timestamp  | NO |  | 0000-00-00 00:00:00 |    | 
| updatedAt | timestamp  | NO |  | 0000-00-00 00:00:00 |    | 
| deletedAt | timestamp  | YES |  | NULL    |    | 
+-----------+------------------+------+-----+---------------------+----------------+ 

И теперь, я пытаюсь думать о том, как я должен осуществить необходимые идентификаторы URI. Но я не мог понять, как я должен это точно реализовать. И я мог бы только пришел с этой идеей, и не могли получить его вперед:

Скажем, у меня есть 2 пользователей один с username из john, а другой с username из jane.

jane хочет добавить john как друг, и когда это делать, она посылает POST запроса:

POST /users/john/friendships 

john увидел это, и хочет, чтобы отрицать или подтвердить его, чтобы сделать это, я пришел с двумя разными идеями; Первый из них является:

PUT /users/jane/friendships?action=(deny|confirm) 

или второй из них:

PUT /users/jane/friendships/<friendshipId>?action=(deny|confirm) 

Традиционно, второй один кажется более подходящим для меня, но я думаю, что я могу просто сделать

PUT /friendships/<friendshipId>?action=(deny|confirm) 

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

ответ

3

Джон мог бы добавить Джейн как друга (в том числе тела запроса с соответствующей информацией):

POST /users/john/friends

... или, Джон мог обновить информацию о своей дружбе с Джейн (опять же, с тело запроса)

PUT /users/john/friends/jane

... или, Джон мог 'Unfriend Джейн.

DELETE /users/john/friends/jane

+0

Спасибо за ответ :) Но это так, как вы могли бы сделать, или это полностью RESTful подход? –

+0

Ну, никакой «REST API» по-настоящему «полностью RESTful», потому что все они требуют некоторого знания API заблаговременно, где REST описывает приложение, которое можно полностью использовать и использовать, начиная с корневого URI. Но варианты, на которые я ответил, уважали глаголы HTTP и их базовые концепции, к которым, как правило, стремятся эти API. – tuespetre

+0

Да, после некоторого размышления, он пришел ко мне тоже, используя '/ friends' вместо'/friendships'. Конечно, мне нужно сделать больше исследований, прежде чем я скажу _i знаю REST_. В любом случае, спасибо вам за ваш вклад. –

Смежные вопросы