freeCodeCamp/guide/russian/rest-api/index.md

106 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Rest API Design
localeTitle: Дизайн API для отдыха
---
### история
REST обозначает презентационный **S** татэ протокола **Т** ransfer **Re.** Рой Филдинг определил REST в своей докторской диссертации в 2000 году.
### Что это?
REST был разработан для обеспечения однородного интерфейса для
* Определение ресурсов
* Манипулирование ресурсами
* Самостоятельные описательные сообщения
* Использование Hypermedia в качестве механизма состояния приложения (HATEOS)
### Лучшие практики
* \#### Основы
| Метод | http://api.co/v2/cars | http://api.co/v2/cars/1234 |
| --- | --- | --- | | GET | Список всех автомобилей | Получить индивидуальный автомобиль | | ПОСТ | Создать новый автомобиль | Ошибка | | PUT | Заменить коллекцию автомобилей новым | Замените автомобиль идентификатором 1234 | | УДАЛИТЬ | Удалить все автомобили | Удалить автомобиль с идентификатором 1234 |
_Обратите внимание, что в то время как операции PUT клиент или сервер могут генерировать идентификаторы_
* #### Существительные хорошие глаголы плохие
* Используйте существительные для обозначения ресурсов, таких как `cars` , `fruits` и т. Д.
* Использовать глаголы для объявлений действий `convertMilesToKms` , `getNutritionalValues`
* #### Сингулярное или множественное?
Используйте правильный грамматик для объявления
**Избегайте** `/person/145`
**Предпочитают** `/people/154` Предположим вернуть 154-го человека из списка людей
* #### Использовать корпус
Используйте любой из приведенных ниже шаблонов и будьте **последовательны!**
| Стили стилей | Пример | | ------------- | ------------- | | **UpperCamelCase** | `http://api.fintech.cp/DailyTransactions/Today` | | **Нижняя Камелия** | `http://api.fintech.cp/dailyTransactions/today` |
| **snake\_case** | `http://api.fintech.cp/daily_transactions/today` |
* #### **Отношения и ресурсы**
* Ресурсы могут иметь отношения « `one-to-many` , « `many-to-many` , « `many-to-one` и т. Д. Картирование их правильно имеет решающее значение.
* Сопоставление « **один ко многим»**
Например, `Tickets/145/messages/4` предлагает отношения «один ко многим» между `tickets` и `messages` . Значение `1` билет имеет `N` сообщений. Сообщение не является автономным ресурсом. У вас не может быть `/messages/4` .
* **От многих до многих**
Например, `/usergroups/345/users/56` предлагает выбрать 345-ю группу пользователей и получить пользователя с идентификатором 56. Однако один пользователь может быть в нескольких `usergroups` т.е. `/usergroups/209/users/56` также действителен. В таком случае для разделения `users` ресурсов-депинантов на отдельную конечную точку, например `/users/56` и обеспечить привязку ресурсов в `/usergroups/209/users/56`
* #### **Параметры API**
* **PATH** : ребуется_ доступ к ресурсу Eg `/cars` , `/fruits`
* **Параметры запроса** : _опционально_ фильтровать список Eg `/cars?type=SUV&year=2010`
* **Тело** : специфическая для ресурсов логика. Предварительный запрос. Иногда это может быть как Query, так и body.
* **Заголовок** : Должен содержать глобальные или платформенные данные. Например, параметры ключа API, зашифрованные ключи для auth, информация о типе устройства, например, мобильная или настольная или конечная точка, тип данных устройства, например xml или json. Использовать заголовок для передачи данных параметров
* #### Коды статуса HTTP
Использовать правильные коды состояния
| Коды | Значение | | ------------- |: -------------: | | 1xx | Запрос получен и понят. | | 2xx | Было получено, понято и запрошено действие, запрошенное клиентом. | | 3xx | Клиент должен предпринять дополнительные действия для завершения запроса. Большинство этих кодов состояния используются в перенаправлении URL. | | 4xx | Предназначен для ситуаций, когда, похоже, ошибка была вызвана клиентом. | | 5xx | Сервер не выполнил запрос. |
Еще немного на **2xx** !
* **201 Создан ресурс.** POST `/cars` должны возвращать HTTP 201, созданный с заголовком `location` котором указывается, как получить доступ к ресурсу Например, `location` : `api.com/cars/124` в заголовке
* **202 - Принято**
Используйте это, если задача огромна для запуска. Скажите клиенту, он принял запрос и будет / является процессом / обработкой Не возвращается полезная нагрузка
* **204 - Нет содержимого**
Используется при удалении `DELETE cars/124` Возвращает содержимое. Но также может вернуть `200 OK` если API намеревается отправить удаленный ресурс для дальнейшей обработки.
Опасные ресурсы **5xx** !
* **500** Внутренняя ошибка сервера
* **504** Тайм-аут шлюза. Сервер не получал своевременного ответа
Менее известный **4xx** предполагает, что вы используете неверный параметр. Может также передавать неверную информацию. Например
`DELETE /cars/MH09234`
возвращает `4xx` или сообщение `Expecting int car id /car/id got string car/MH09234`
### **дальнейшее чтение**
[Как разработать отличные API - Parse Developer Day 2013](https://www.youtube.com/watch?v=qCdpTji8nxo)
[Бесконечная дискуссия по дизайну REST API от Guillaume Laforge](https://www.youtube.com/watch?v=48azd2VqtP0)
[Коды состояния HTTP](https://httpstatuses.com/)