Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Существительные — это хорошо, а глаголы — плохо
/getAllDogs
/getAllLeashedDogs
/getDog
/newDog
/saveDog
PATCH для частичного изменения ресурса. Вот пример его использования в API гитхаба.Вместо глаголов — HTTP
Мы только что описали собак с помощью двух базовых URL адресов с существительными. Теперь нам нужно работать с созданными сущностями. Чаще всего требуются операции чтения, создания, редактирования и удаления (CRUD — Create — Read — Update — Delete). Для этого нам прекрасно подойдут HTTP-методы GET, POST, PUT и DELETE.
POST /dogs — создать новую собаку
GET /dogs — получить список собак
PUT /dogs — редактирование всех собак сразу
DELETE /dogs — удаление всех собак
POST /dogs/12345 — вернуть ошибку (собака 12345 уже создана)
GET /dogs/12345 — показать информацию о собаке
PUT /dogs/12345 — редактировать собаку 12345
DELETE /dogs/12345 — удалить
Базовые URL выглядят просто, глаголы не используются, все интуитивно и понятно. Красота!
GET и POST не умеет. Вариант с ?method=DELETE выглядит корявее, чем явное указание действия.Да, конечно среди распространённых браузеров вроде бы нет урезания функционала по выбору метода.
method="put" и отправил её через браузер google chrome — метод был заменён на «get».Но клиентом может быть и не браузер. API и создаётся для того, чтобы доступ к данным не зависел от клиента.
метод был заменён на «get».
{
"method": "update",
"data": {
....
}
}
{
"status": "success",
"statusCode": "200",
"message": "ok"
}
Кстати, json далеко не лучший формат представления данных в апи. Потому что имеет косяки с расширяемостью. XML конечно тоже имеет проблемы, но сильно меньше. Зачастую изменение формата JSON приводит к необходимости увеличивать версию апи, потому что код работающий со старым форматом начинает падать на новом. В XML больше возможностей для расширения благодаря более абстрактным структурам (дерево из именованных узлов вместо массивов и хэшей в JSON).
Здорово поддерживать несколько форматов ответа.
Google ?alt=json
Foursquare /venue.json
Digg ?type=json
Кстати, Digg позволяет установить формат ответа и через HTTP-заголовок Accept.
The Accept request-header field can be used to specify certain media types which are acceptable for the response.
Если какие-то прокси реализовуют протокол не правильно (не передают заголовки), то это по большей сути не ваша проблема.
Но это уже будет не HTTP/1.1
А если другой клиент опередит и создаст объект с таким id на миллисекунду раньше?
api.* -> developers.*Навеяло Балмера.
dev.* -> developers.*
developer.* -> developers.*
Смело берите HTTP коды ответов и сопоставляйте с ответами вашего API.
Предусмотрите в своем API параметр suppress_response_codes и сделайте его равным true по умолчанию.
Разработка web API