Должен ли HTTP REST-запрос к Серверу возвращать данные в определенном формате, ожидаемом Клиентом?

При использовании библиотеки на стороне клиента, которая ожидает данные в определенном формате (например, [{id: 1, name: "Jack", available: true}]), если сервер обрабатывает данные в точной структуре, запрошенной клиентом, или отправляет обратно общие данные (например, [{userId: 1, username: "Jack", isUserAvailable: true}]) что можно затем смоделировать на стороне клиента, чтобы избежать жесткой связи и разрыва, если библиотека на стороне клиента изменится в будущем?

2 ответа

Клиент должен зависеть от интерфейса, который предоставляет сервер. Этот интерфейс может рассматриваться как договор, с которым сервер и клиент соглашаются. Это подразумевает предоставленные структуры данных и является формой связи. Отсюда необходимость четко описывать / определять API и иметь политику для управления версиями и их устаревания.

Так что на первый взгляд это может показаться жесткой связью, но это не обязательно. Клиент и сервер могут использовать или не использовать один и тот же язык / представление данных. В этом примере клиент может делать с JSON все, что хочет. Он может использовать все данные или только один атрибут. Все это не имеет отношения к серверу. Точно так же клиент не имеет отношения к тому, как сервер создал эту строку JSON. Из-за контракта на обслуживание, описывающего только интерфейс и вытекающую из этого свободу для реализаций сервер / клиент, связь может считаться свободной (достаточной).

Если у вас есть устаревшие системы или вы не можете изменить форматы или вам требуется поддержка определенных клиентов, которые не могут быть изменены, рассмотрите API-шлюз, который может выполнять преобразования для вас на разных конечных точках.

Но обычно моделируйте ваш API как можно более открытым. Вы вряд ли сможете определить его для каждого отдельного клиента.

Другие вопросы по тегам