Дизайн REST API Какой метод следует использовать для конечной точки, которая вызывает сторонний API? - PullRequest
0 голосов
/ 13 января 2020

Я читал об идемпотентных методах и неидемпотентных методах в REST API, и сейчас я создаю REST API, в котором есть конечная точка, которая вызывает сторонний API, то есть поиск рейсов. Что может быть подходящим методом HTTP для этой конечной точки?

GET flights/from=khi&to=dxb&adults=1&date=2020-01-01

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

Спасибо

Ответы [ 2 ]

3 голосов
/ 13 января 2020

Как если бы вы шли прямо в базу данных, фактический код ответа может отличаться. Идемпотентность - это влияние, которое ваш вызов оказывает на ресурс.

Эффект, который ваш вызов оказывает на сторонний API, всегда одинаков, независимо от того, делаете ли вы его 1 раз или 100 Ресурс может со временем меняться, но вы никогда не меняете ресурс с помощью запроса GET. Вот почему он идемпотент.

1 голос
/ 13 января 2020

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

Семантика GET: safe , что является более сильным ограничением, чем idempotent :

Безопасные методы запроса являются idempotent .

Семантика GET заключается в том, что он запрашивает текущее выбранное представление для целевого ресурса . «Текущее» означает, что выбранное представление может меняться со временем, даже между запросами.

Тот факт, что ваши представления зависят от сторонней службы, является подробностью реализации и не меняет семантика запросов или ответов.

...