Я создаю интерфейс REST, который в настоящее время имеет более 250 ресурсов. К тому времени, когда я закончу, я ожидаю, что у меня будет более 1000. Это приложение ERP, которое охватывает бухгалтерский учет, инвентарь, продажи, затраты на оплату труда, инжиниринг и т. Д.
Размер или сложность отдельного ресурса напрямую не связаны с REST, а больше относятся к типам носителей. Я выбрал путь определения своего собственного типа медиа, так как я создаю клиент, и интерфейс не предназначен для общего пользования. Выбор наилучшего типа носителя для вашей ситуации, вероятно, является одной из самых сложных частей проектирования интерфейса REST.
К сожалению, большинство людей, похоже, решают выбрать тип носителя / типа и выбирают универсальное приложение / json или application / xml, а затем используют загруженный javascript в браузере для интерпретации формата. [1] Это работает до тех пор, пока у вас есть единственный клиент - браузер, и вы не хотите, чтобы кто-нибудь еще использовал ваш интерфейс. Мне кажется, что это побеждает одну из главных целей REST, то есть случайное повторное использование из-за слабой связи и стандартизированных форматов.
Чтобы дополнительно объяснить, что я имею в виду, рассмотрим случай, когда вы доставляете application / json или application / xml клиентскому приложению. Как только клиентское приложение достигает этого общего формата и извлекает определенный фрагмент данных, вы создаете скрытую связь между клиентом и сервером. Если вместо этого вы используете медиа-формат «application / vnd.mycompany.myformat + xml», вы явно определяете контракт с клиентом. Это имеет огромное преимущество, когда вы вносите изменения в формат, и у вас есть возможность создать «application / vnd.mycompany.myformatV2 + xml»
Люди воспринимают REST как слабо определенный интерфейс, но на самом деле это не так. Интерфейс REST должен быть очень явным в точных типах носителей, которые он возвращает и ожидает получить. Типы носителей - это контракт. Если вы получаете application / xml и используете код клиента для вывода / Customer / Name, вы нарушаете договор.
Веб-приложения, использующие загруженный javascript, могут использовать «application / xml», поскольку детали контракта не скомпилированы в клиенте. Однако поведение клиента чрезвычайно ограничено выполнением того, что было предварительно запрограммировано в JavaScript. К сожалению, большинство общедоступных интерфейсов RESTful игнорируют это ограничение, и люди создают клиентов, которые тесно связаны с неопределенным контрактом. Вот почему, когда Twitter меняет свой формат, многие клиенты ломаются.