2013-10-08 3 views
0

Простой вопрос. Я прочитал кучу статей о дизайне API и не нашел ответа.RESTful API design: внутреннее взаимодействие

Как конечные точки API взаимодействуют друг с другом?

Например, если у меня есть 2 конечных точки: /category/:name и /messages. Каков наилучший способ, например, проверить существование категории из сообщений?

1) Запрос базы данных от /messages обработчик типа: SELECT * FROM категорий WHERE name = 'test'?

или

2) HTTP запрос от /messages обработчика к этой конечной точке, как: httpclient.get ('/ категория/тест')?

или

3) Клиент должен получить все категории, получить идентификатор конкретной категории и отправить запрос на /messages с этой категорией ID?

ответ

1

Вопрос прост, но не ответ. Одно можно сказать наверняка, никогда не используйте (2) решение. Запрос некоторых данных с помощью http-клиента при вызове метода приведет к снижению производительности и емкости вашего API.

Если проверка существования определенной категории требуется для создания ответа в /messages затем использовать (1), но вместо того, чтобы вызывать SQL-запрос вызова тот же метод, используемый для обработки запроса /category/test просто вызвать его на месте не через HTTP.

Решение (3) - это путь REST, когда каждая конечная точка отвечает только за один тип ресурсов. Недостатком является то, что может потребоваться больше HTTP-запросов от клиента к API.

1

Вы должны проектировать свое приложение таким образом, чтобы вся конечная точка вызывала внутренние API для выполнения задачи. Если вы хотите вызывать одну операцию внутри другого, вы должны использовать соответствующий внутренний API, а не любой другой подход, например вызов службы http.

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