Как выбрать протокол для API?

Фронтенд приложения связывается с бэкендом. Формат только JSON. По мере развития всё больше методов и "концов" и растёт зоопарк:
  1. один метод возвращает JSON с массивом id или пустой массив;
  2. другой возвращает строку с HTML-разметкой, чтобы просто вставить;
  3. третий может отказать в ответе с сообщением для юзера «нет прав на данный объект», а может вернуть объект;

Надо бы унифицировать протокол, прийти к единому виду на случай нормального ответа или ошибок. Единому реестру кодов ошибок. Генерить описание этого протокола для сторонних девелоперов.

Каковы best practice?

  • ВКонтакте: методы возвращают нагрузку ответа в поле response, ошибку, если возникла - в поле error (тогда response отсутствует).
  • AWS: нагруза в теле ответа. Ошибки в коде статуса ответа.
  • MailChimp: как Amazon
  • Telegram: bot api в ответ на вызовы методов всегда возвращает в JSON поле "ok" которое имеет значение true или false.
  • Вопрос задан
  • 1039 просмотров
Решения вопроса 3
@ksnk
Для начала - унифицировать формат вывода. Можно остановиться только на json, или просто указывать формат вывода в параметрах - json/txt/html/xml. Для json - нужно будет описать и зафиксировать документацией поля возвращаемого объекта. Нужны ли другие форматы вывода - смотри по месту. txt может быть удобен для тестирования и отладки АПИ.
Если предполагается продолжительное существование проекта - нужно добавить в json поле - "версия" АПИ
Ответ написан
borisdenis
@borisdenis
Ленив и вреден...
Была подобная ситуация, поступили в принципе так как советует ksnk но с одним изменением. Если запрос на апи приходит без номера версии то возвращаем ответ так, как было раньше, если в запросе указан номер версии то тут уж все по правилам. Таким образом проще было перетянуть все хозяйство на единое апи разным разработчикам.
Ответ написан
@Zanak
По поводу json есть и стандарт, я про https://ru.wikipedia.org/wiki/JSON-RPC. Возможно и не один, просто этот вспомнился первым.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы