Ниже следует учитывать
- Независимость от платформы. (Любой клиент должен иметь возможность вызывать API, независимо от того, как API реализован внутри).
- Развитие службы. (Веб-API должен иметь возможность развиваться и добавлять функциональность независимо от клиентских приложений.)
Ресурс имеет идентификатор, который представляет собой URI, который уникальным образом идентифицирует этот ресурс. Например, URI для конкретного заказа клиента может быть:
Запрос: GET -> https://domain/orders/1 Ответ: JSON {"orderId": 1111, "сумма": 99,90 , "productId": 1, "количество": 1}
Наиболее распространенными операциями являются GET, POST, PUT, PATCH и DELETE.
GET возвращает представление ресурса по указанному URI. Тело ответного сообщения содержит сведения о запрашиваемом ресурсе.
POST создает новый ресурс по указанному URI. Тело сообщения запроса содержит подробности нового ресурса. Обратите внимание, что POST также можно использовать для запуска операций, которые фактически не создают ресурсы.
- PUT создает или заменяет ресурс по указанному URI. Тело сообщения запроса указывает ресурс, который будет создан или обновлен.
- PATCH выполняет частичное обновление ресурса. Тело запроса указывает набор изменений, которые должны применяться к ресурсу.
- DELETE удаляет ресурс по указанному URI.
API-интерфейсы REST используют модель запросов без сохранения состояния. HTTP-запросы должны быть независимыми и могут происходить в любом порядке, поэтому хранение промежуточной информации о состоянии между запросами невозможно.
Мы можем вернуть ответ с гиперссылками в виде пружинной загрузки с этой функцией
[Spring Boot:] https://spring.io/guides/gs/rest-hateoas/
https://domain/orders (лучше)
https://domain/create-order (избегать)
- Ресурс не обязательно должен быть основан на одном физическом элементе данных. Например, ресурс заказа может быть реализован внутри как несколько таблиц в реляционной базе данных, но представлен клиенту как единый объект. Избегайте создания API, которые просто отражают внутреннюю структуру базы данных.
- Клиент не должен подвергаться внутренней реализации.
- Не требовать, чтобы URI ресурсов были более сложными, чем (заказ / коллекция / элемент / детали)
Резюме
- Pagination Support : /orders?limit=25&offset=50
- Error handing :
- API Version (avoid as much as if possible)
См. Здесь https://www.openapis.org/blog/2017/03/01/openapi-spec-3-implementers-draft-released