LINUX.ORG.RU

История изменений

Исправление 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,
}

Стандартов нет. Все делают по аналогии, чтобы не изобретать велосипед. Берут за основу что-то от бигтеха и пародий на него. Ковыряй:


Что надо отметить: так то, что все со временем менялось. Эти «стандарты» идеального 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,
}

Стандартов нет. Все делают по аналогии, чтобы не изобретать велосипед. Берут за основу что-то от бигтеха и пародий на него. Ковыряй:


Что надо отметить: так то, что все со временем менялось. Эти «стандарты» идеального 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: { /* ... */ }
}

Ковыряй: