Должен ли HTTP REST-запрос к Серверу возвращать данные в определенном формате, ожидаемом Клиентом?
При использовании библиотеки на стороне клиента, которая ожидает данные в определенном формате (например, [{id: 1, name: "Jack", available: true}]
), если сервер обрабатывает данные в точной структуре, запрошенной клиентом, или отправляет обратно общие данные (например, [{userId: 1, username: "Jack", isUserAvailable: true}]
) что можно затем смоделировать на стороне клиента, чтобы избежать жесткой связи и разрыва, если библиотека на стороне клиента изменится в будущем?
2 ответа
Клиент должен зависеть от интерфейса, который предоставляет сервер. Этот интерфейс может рассматриваться как договор, с которым сервер и клиент соглашаются. Это подразумевает предоставленные структуры данных и является формой связи. Отсюда необходимость четко описывать / определять API и иметь политику для управления версиями и их устаревания.
Так что на первый взгляд это может показаться жесткой связью, но это не обязательно. Клиент и сервер могут использовать или не использовать один и тот же язык / представление данных. В этом примере клиент может делать с JSON все, что хочет. Он может использовать все данные или только один атрибут. Все это не имеет отношения к серверу. Точно так же клиент не имеет отношения к тому, как сервер создал эту строку JSON. Из-за контракта на обслуживание, описывающего только интерфейс и вытекающую из этого свободу для реализаций сервер / клиент, связь может считаться свободной (достаточной).
Если у вас есть устаревшие системы или вы не можете изменить форматы или вам требуется поддержка определенных клиентов, которые не могут быть изменены, рассмотрите API-шлюз, который может выполнять преобразования для вас на разных конечных точках.
Но обычно моделируйте ваш API как можно более открытым. Вы вряд ли сможете определить его для каждого отдельного клиента.