Да, это сработает. Тем не менее, вы основываете свой дизайн распределенной системы на предположении, что модель данных очень проста и останется таковой. Если созданное вами приложение успешно, вы можете быть уверены, что будут добавлены новые требования и будут запрашиваться новые функции.
Предоставление слоя данных, как вы предлагаете, плотно связывает ваши клиентские приложения с моделью данных, и использование вами http делает очень сложным выполнение транзакций с несколькими запросами. Я знаю, вы сказали, что вам не нужно делать транзакции с несколькими запросами. Не сегодня, а, может быть, в следующем году?
Какова продолжительность жизни в этом приложении? Если вы скажете больше, чем через пару лет, я бы подумал о том, чтобы разоблачить слой данных удаленными клиентами. Одной из основных целей REST является отключение клиента и серверного приложения, чтобы приложения могли развиваться в течение длительного периода времени. Если у вас есть несколько клиентских приложений, обращающихся к распределенной службе, если они не разработаны правильно, они могут быстро столкнуться с неприятными проблемами обслуживания и версий.
Редактировать, чтобы ответить на вопрос в комментариях о клиенте нуждающегося понять модель:
У вас есть два различных направления вы можете предпринять относительно того, как клиент может взаимодействовать с представлением полученных от сервера.
- Вы можете разрешить клиенту иметь ясное знание содержимого данных, содержащегося в представлении. То есть Клиент знает, что в некоторых элементах XML есть имя пользователя и пароль. Однако, если вы это сделаете, вы должны вернуть определенный тип носителя, например. Приложение/vnd.mycompany.user + XML. Вы не должны использовать application/xml, так как это не говорит клиенту ничего о том, что есть в документе XML. Если клиент должен был знать, что «когда вы идете по URL-адресу X» вы получаете «документ Xml, который содержит элементы UserName и Password внутри элемента User», то вы нарушили самоописательное ограничение REST. Воздействие заключается в том, что вы связали конечную точку с медиа-типом и фактически связали клиента с этой конечной точкой. Цель «ограничения гипермедиа» REST заключается в предотвращении связи между клиентом и конечными точками.
- Альтернативой является использование более общего типа носителей, который просто предназначен для предоставления клиенту контента для отображения пользователю и предоставления пользователю возможности для принятия действий. Тип медиатеки html позволяет сделать это, предоставив язык разметки, который можно использовать для возврата имени пользователя и пароля в два тега div. Используя тег HTML и тег html, клиент может выполнять дополнительные операции над этим ресурсом. Выяснив, как сделать доступными все возможные операции, которые может иметь объект «пользователь», по-настоящему RESTful, сложнее и требует довольно много опыта, но конечный результат - очень хорошо развязанный клиент и сервер. Посмотрите на веб-браузер в качестве примера, как часто вам нужно делать обновление браузера, потому что веб-сайт изменил его содержимое.
Проблема с вариантом номер два заключается в том, что использование только HTML-кода, как правило, имеет ограниченный характер, и именно здесь находится Javascript. Одним из «необязательных» ограничений REST является загрузка кода , Javascript - это код, загружаемый с сервера, для обеспечения дополнительного поведения на клиенте. К сожалению, на мой взгляд, это также дает возможность людям создавать веб-интерфейсы RESTful, которые возвращают application/xml, а затем используют javascript для интерпретации этого общего формата. Это решение отлично подходит для оригинального разработчика веб-сайта, который использует RESTful API, потому что, если содержимое xml-файла изменяется, javascript можно изменить и повторно загрузить в браузер, и все хорошо. Тем не менее, для любого другого стороннего разработчика, который обращается к этому API, который не контролирует модель содержимого приложения/xml, их код становится полностью хрупким и потенциально ломается, если изменяется содержимое API. Спросите любого, кто написал какой-либо клиент для Twitter, сколько раз их приложение нарушилось, потому что Twitter изменил контент.
Используя первый вариант и предоставив контент определенному типу мультимедиа, разработчик сервера может представить новый медиа-тип, называемый application/vnd.mycompany.userV2 + xml, и используя согласование контента, существующие клиенты все еще могут получить оригинал тип носителя и новые клиенты могут быть созданы для использования нового типа носителя. URL-адрес остается неизменным, закладки не разбиты, потому что конечная точка и медиатип не связаны.
Если вы видите документацию по API, в которой содержится список адресов и контента, возвращаемого с этих URL-адресов, то вероятность того, что эти разработчики просто не получат REST и не получит преимуществ, предоставляемых интерфейсом RESTful. По иронии судьбы, это не те разработчики, которые пострадают больше всего, это третьи стороны, пытающиеся взаимодействовать с API, который пострадает!
Как раз так, вы знаете, у REST абсолютно нет ничего общего с схемами именования URI, и нет такой вещи, как «URL-адрес REST-URL» или «URL-адрес REST-типа». Я думаю, вы совершенно не поняли, что такое REST. – aehlke