Я новичок в использовании API REST, но я видел, что многие системы, которые предоставляют API REST, не предоставляют схему (структуру) сообщения, которое будет возвращено. Из-за этого мы не можем быть уверены в том, как точно анализировать ответ. Например, вызов API сегодня может возвращать определенный набор полей, и позже в какой-то момент они могут захотеть добавить в ответ другое поле, которое может испортить мой парсер. Итак, если я должен разобрать ответное сообщение о конкретном вызове, как я могу сделать это правильно? Как системы, которые выставляют эти API, обрабатывают вызовы внутренне?Схемы остаточных API-интерфейсов
ответ
Вот почему версионирование было изобретено, если что-то изменилось крупное, ответственный поставщик будет иметь другой номер версии для этого.
Это может случиться практически с любой библиотекой, в которой вы используете не только API REST.
Обычное соглашение заключается в том, что ваша нумерация версий в формате Major.minor.patch
(см. http://semver.org/). Все, что нарушает обратную совместимость, должно иметь основной номер версии. Конечно, не все сопровождающие следуют этому примеру, следуйте за ним, если ваш провайдер (ы), у которого вы потребляете API, является плохим в этом, вы не можете много сделать.
Что вы можете сделать, это убедиться, что вы реализуете и управление версиями зависимостей для всех библиотек, включая ваш API, ну, знаем, какую версию вы хотите поддержать использование explict версий на основе вызовов вместо
http://example.com/api/customers/1234
использование
http://example.com/api/v3.0/customers/1234
и следить за зависимостями для вашего проекта, а также следить за документацией поставщика обновлений, увидеть, если это будет влиять на вас в Анвэй
Что касается API, который находится в схематичных форматах, в то время как новые поля могут не создавать проблем, удаление существующих или изменение представления, логика и т. Д. Нарушит ваш код способами, которые трудно отлаживать, изменения могут быть тонкими.
После того, как провайдер я использовал измененное поле ко всем строчным регистрам и не сообщил мне, мое приложение ожидало уникальных значений для поля, но получало аналогичные значения в некоторых редких случаях, мне потребовались дни, чтобы выяснить, где и что произошло,
Многие службы REST используют JSON в качестве базового формата для кодирования данных. Клиенты должны просто игнорировать свойства, которые они не знают в ответе JSON, тем самым позволяя серверу развивать свой вывод с течением времени (учитывая, что сервер не переименовывает или не удаляет свойства). Управление версиями службы REST - это отдельная дискуссия (попробуйте найти ее).
Итак, вкратце - новые поля не должны испортить ваш синтаксический анализатор, он должен просто игнорировать их.
Хорошо, самые хорошие делают! см., например, - OpenStack REST API. Кроме того, обратите внимание, что ответ возвращается для этой конкретной версии API, то есть, если вы используете API (скажем):
/api/v1.0/interfaces/interface
и вы можете получить некоторые поля, как:
{ "name : "eth0", "ip" : "10.1.1.1" }
Теперь API может развиваться, и может быть версия 1.1
, которая добавляет несколько полей (сохраняя обратную совместимость). То есть, /api/v1.1/interfaces/interface
может вернуться:
{ "name : "eth0", "ip" : "10.1.1.1" , "mtu" : 1500 }
или 2.0
, который имеет совершенно иную структуру, нарушая обратную совместимость:
GET /api/v2.0/interfaces/interface
...
{ "interface" : { "name : "eth0", "ip" : "10.1.1.1" , "mtu" : 1500 }}
снова, все они должны быть хорошо документированы!
И код с использованием API, должен знать о версиях, в которых они заинтересованы, и соответствующим образом анализировать ответ.
Формат ответа, кстати, зависит от вида запроса вы делаете, в течение, например, если вы С.Е. Accept-кодирование в формате JSON (Accept: application/json
), возвращаемый ответ должен быть в формате JSON - так что вы знаете, какие парсер для использования.
НТН
- 1. Сохранение остаточных значений
- 2. Группировка остаточных маршрутов в рельсах
- 3. Адаптерный прокси для остаточных API
- 4. Самая быстрая структура данных для остаточных графиков
- 5. Тестирование остаточных контроллеров с профилировщиком - Laravel 3
- 6. Удаление остаточных файлов любого приложения на Uninstall
- 7. Как построить несколько остаточных графиков LME в одном устройстве
- 8. Извлечение остаточных значений из матриц лавановых списков в R
- 9. Цветовой код различных остаточных групп на том же участке R
- 10. Node.js Mocha Тестирование остаточных конечных точек API и покрытия кода
- 11. Встроенные Vs Остаточных в ежемесячных временных рядах линейной модель
- 12. Линейная корреляция 1 Оставшихся остаточных значений в MATLAB
- 13. Тип схемы схемы Mongoose
- 14. Использование схемы схемы API
- 15. Предложения схемы схемы Кассандры
- 16. Жизнеспособность схемы схемы Кассандры
- 17. Образ схемы схемы обратной связи
- 18. Предложения для схемы схемы чатов
- 19. Помощь с помощью схемы схемы
- 20. Mongoose: чередуя схемы внутри схемы
- 21. Json.NET - версия схемы схемы JSON
- 22. Имя схемы схемы SQL Server
- 23. Как заставить имя схемы схемы?
- 24. схема переопределения угловой схемы-схемы
- 25. Параметры схемы схемы базы данных
- 26. xs: любая проверка схемы xml-схемы
- 27. Изменение имени схемы схемы Entity Framework
- 28. Поддержка схемы схемы в API управления Azure
- 29. Найти запрос для схемы схемы MongoDb
- 30. Рекомендации по разработке схемы схемы кода купона