История изменений
Исправление rtxtxtrx, (текущая версия) :
Если у вас добавляется логика и поле появляется динамически или в ответ на какой-то путь у вас возвращается разный тип объектов, это уже нехорошо имхо.
абсолютно неверно.
Никто никому ничего не должен. Ресурс может возвращать:
// Объект user
{
"id": 123
"name": "Lox"
}
// Можно с envelop
{
"user": {
"id": 123
"name": "Lox"
}
}
// Список ресурсов
{
"page": 2,
"pages": 3,
"per_page": 5,
"results": [User1, User2, ...]
}
// С envelop
{
"page": 2,
// ...
"users": [User1, User2, ...]
}
// Ошибку (объект типа Егоr)
{
"error": "NotFound",
"description": "User not found",
}
// Иногда добавляют какое-то бесполезное поле
{
"success": true,
// Тут поля ошибки или объекта
// Иногда могут обернуть
"data": { /* ... */ },
// Иногда data и error всегда присутствуют
"error": null,
}
Стандартов нет. Все делают по аналогии, чтобы не изобретать велосипед. Берут за основу что-то от бигтеха и пародий на него. Ковыряй:
- https://docs.github.com/en/rest?apiVersion=2022-11-28
- https://telegram.rest/
- https://dev.vk.com/ru/method
- https://github.com/hhru/api
Что надо отметить: так то, что все со временем менялось. Эти «стандарты» идеального API. Изначально все писали на похапе, где ++"42"
вполне себе валидный код, поэтому тело запроса могло кодироваться как application/x-www-form-urlencoded
. Но в той джаббе на которую многие переползли с пхп, или в питоне, так нельзя. Поэтому тело начали в JSON кодировать, так как он типизированный ({"foo": 42}
). Да и всякие фильтры для поиска чего-то тоже делают в JSON типа /api/users?q="{\"age\":{\"gt\":18}}"
… А всякие особые статусы и пр извращение — они фактически никому не нужны, это хотелки перфекционистов либо придурков, которые Фаулера начитались и тп. Сделали - хорошо, не сделали - без разницы. Тут читаемость не важна, конечные пользователи не будут эти json’инины редактировать, тут все упирается в хотелки и возможности фронтенда на JavaScript, где JSON — единственный доступный формат из коробки, а чтобы использовать какие-то BSON и тп — JS банально не имеет каких-то «сырых» строк, где каждый символ-байтик (в PHP строки - это набор байт, а на фронте - кодепоинты «юникода»)
Исправление rtxtxtrx, :
Если у вас добавляется логика и поле появляется динамически или в ответ на какой-то путь у вас возвращается разный тип объектов, это уже нехорошо имхо.
абсолютно неверно.
Никто никому ничего не должен. Ресурс может возвращать:
// Объект user
{
"id": 123
"name": "Lox"
}
// Можно с envelop
{
"user": {
"id": 123
"name": "Lox"
}
}
// Список ресурсов
{
"page": 2,
"pages": 3,
"per_page": 5,
"results": [User1, User2, ...]
}
// С envelop
{
"page": 2,
// ...
"users": [User1, User2, ...]
}
// Ошибку (объект типа Егоr)
{
"error": "NotFound",
"description": "User not found",
}
// Иногда добавляют какое-то бесполезное поле
{
"success": true,
// Тут поля ошибки или объекта
// Иногда могут обернуть
"data": { /* ... */ },
// Иногда data и error всегда присутствуют
"error": null,
}
Стандартов нет. Все делают по аналогии, чтобы не изобретать велосипед. Берут за основу что-то от бигтеха и пародий на него. Ковыряй:
- https://docs.github.com/en/rest?apiVersion=2022-11-28
- https://telegram.rest/
- https://dev.vk.com/ru/method
- https://github.com/hhru/api
Что надо отметить: так то, что все со временем менялось. Эти «стандарты» идеального API. Изначально все писали на похапе, где ++"42"
вполне себе валидный код, поэтому тело запроса могло кодироваться как application/x-www-form-urlencoded
. Но в той джаббе на которую многие переползли с пхп, или в питоне, так нельзя. Поэтому тело начали в JSON кодировать, так как он типизированный ({"foo": 42}
). Да и всякие фильтры для поиска чего-то тоже делают в JSON типа /api/users?q="{\"age\":{\"gt\":18}}"
… А всякие особые статусы и пр извращение — они фактически никому не нужны, это хотелки перфекционистов либо придурков, которые Фаулера начитались и тп
Исправление rtxtxtrx, :
Если у вас добавляется логика и поле появляется динамически или в ответ на какой-то путь у вас возвращается разный тип объектов, это уже нехорошо имхо.
абсолютно неверно.
Никто никому ничего не должен. Ресурс может возвращать:
// Объект user
{
"id": 123
"name": "Lox"
}
// Можно с envelop
{
"user": {
"id": 123
"name": "Lox"
}
}
// Список ресурсов
{
"page": 2,
"pages": 3,
"per_page": 5,
"results": [User1, User2, ...]
}
// С envelop
{
"page": 2,
// ...
"users": [User1, User2, ...]
}
// Ошибку (объект типа Егоr)
{
"error": "NotFound",
"description": "User not found",
}
// Иногда добавляют какое-то бесполезное поле
{
"success": true,
// Тут поля ошибки или объекта
// Иногда могут обернуть
"data": { /* ... */ },
// Иногда data и error всегда присутствуют
"error": null,
}
Стандартов нет. Все делают по аналогии, чтобы не изобретать велосипед. Берут за основу что-то от бигтеха и пародий на него. Ковыряй:
Исходная версия rtxtxtrx, :
Если у вас добавляется логика и поле появляется динамически или в ответ на какой-то путь у вас возвращается разный тип объектов, это уже нехорошо имхо.
абсолютно неверно.
Никто никому ничего не должен. Ресурс может возвращать:
// Объект user
{
"id": 123
"name": "Lox"
}
// Можно с envelop
{
"user": {
"id": 123
"name": "Lox"
}
}
// Список ресурсов
{
"page": 2,
"pages": 3,
"per_page": 5,
"results": [User1, User2, ...]
}
// С envelop
{
"page": 2,
// ...
"users": [User1, User2, ...]
}
// Ошибку (объект типа Егоr)
{
"error": "NotFound",
"description": "User not found",
}
// Иногда добавляют какое-то бесполезное поле
{
"success": true,
// Тут поля ошибки или объекта
// Иногда могут обернуть
data: { /* ... */ }
}
Ковыряй: