ОТДЫХ может быть очень тонким.Я также много читал об этом, и время от времени я возвращался и читал главу 5 диссертации Филдинга , каждый раз находя больше понимания.В первый раз это было так же ясно, как грязь (хотя некоторые вещи имели смысл), но стало лучше, когда я попытался применить принципы и использовать строительные блоки.
Итак, исходя из моего текущего понимания, давайте попробуем:
Почему RESTafarians не любит генерацию кода?
Краткий ответ: ЕслиВы используете гипермедиа (+ ссылки) Нет необходимости .
Контекст: явное определение контракта (WADL) между клиентом и сервером не уменьшает сцепление достаточно : Если вы меняете сервер, клиент ломается, и вам необходимо восстановить код.(ИМХО даже автоматизация - это всего лишь патч к основной проблеме связывания).
REST помогает разделить на разных уровнях. Обнаружение гипермедиа - один из самых важных товаров для начала.См. Также связанную концепцию HATEOAS
Мы позволяем клиенту «выяснить», что можно сделать из ресурса, над которым мы работаем , вместо того, чтобы определять контракт раньше.Мы загружаем ресурс, проверяем «именованные ссылки» и затем следуем по этим ссылкам или заполняем формы (или ссылки на формы), чтобы обновить ресурс.Сервер действует как руководство для клиента с помощью опций, которые он предлагает в зависимости от состояния.(Подумайте, бизнес-процесс / рабочий процесс / поведение).Если мы используем договор, нам нужно знать эту «внешнюю» информацию и обновлять договор об изменениях.
Если мы используем гипермедиа со ссылками, нет необходимости иметь «отдельный договор».Все включено в гипермедиа - зачем разрабатывать отдельный документ?Даже шаблоны URI не содержат никакой информации, но, если хранить их просто, они могут работать как Amazon S3.
Да, нам по-прежнему нужно общее основание для поддержки при передаче представлений (гипермедиа), поэтому мы определяем ваши собственные типы мультимедиа илииспользуйте общепринятые, такие как Atom или Микроформаты .Таким образом, с ограничениями основных строительных блоков (ссылка + формы + данные - гипермедиа) мы уменьшаем связь, сводя к минимуму внеполосную информацию.
Сначала кажется, что использование гипермедиа не меняет воздействияизменений :): Но есть тонкие различия.Во-первых, если у меня есть WADL, мне нужно обновить другой документ и развернуть / распространить.Использование чистой гипермедиа не оказывает никакого влияния, поскольку оно встроено.(Представьте, что изменения происходят через сложное переплетение систем).В соответствии с вашим примером наличие FirstName + LastName и добавление FullName на самом деле не влияет на клиентов, но удаление First + Last и замена на FullName влияет даже на гипермедиа.
Примечание: унифицированный интерфейс REST (ограничения глагола)- GET, PUT, POST, DELETE + другие глаголы) отделяет реализацию от сервисов.
Возможно, я совершенно не прав, но другой возможностью может быть «психологический откат» к генерации кода: WADL заставляет задуматься оWSDL (контрактная) часть в «традиционных веб-сервисах (WSDL + SOAP)» / RPC, которая идет вразрез с REST.В состоянии REST передается через гипермедиа, а не через RPC, которые являются вызовами методов для обновления состояния на сервере.
Отказ от ответственности: я не закончил подробно упомянутую статью, но я даю некоторые важные моменты.