2013-04-24 5 views
1

У меня есть метод REST для пользователей поиска. Сейчас я имею следующую сигнатуру для метода REST:Передача DTO для запроса GET в REST

MyResponse GetUsers(UserSearchDTO search, int pageno, int totalrecords); 

т.е. он принимает один объект из UserSearchDTO, pageno и totalrecords параметров. URL будет выглядеть

myapp/users?pageno={pageno}&totalrecords={totalrecords} 

Конечный клиент будет посылать «PUT» запрос на эту услугу, как:

myapp/users?pageno=1&totalrecords=10 и вместе с ним будет передавать данные XML вывешено UserSearchDTO как

<UserSearchDTO><Department>d</Department><Name>abc</Name></UserSearchDTO> 

Является ли это хорошей архитектурой, то есть для того, чтобы получить пользователей, я использую тип запроса «PUT». Причина в том, что конечный клиент должен пройти UserSearchDTO в форме xml?

Другой подход, который я имею в виду чистый «GET», а то с помощью UserSearchDTO я должен иметь следующую подпись:

MyResponse GetUsers(string department,string name,...., int pageno, int totalrecords); 

и конечный клиент будет назвать это нравится: MYAPP/пользователей? отдел = d & имя = абв & ...... & pageno = 1 & totalrecords = 10

+0

pageno и totalrecords оба типа int i.e, они принимают только целое число. –

ответ

0

Я нахожусь в процессе написания моей первой службы REST, так что я не эксперт, но по-моему, я подумайте, что было бы лучше использовать запрос GET, так как это именно то, что вы делаете - получение данных с сервера. Это упростит другим разработчикам поддержку приложения, вместо того, чтобы понять, почему вы использовали PUT для базового поиска данных.

Если возможно, я предлагаю вам попробовать лить UserSearchDTO XML в качестве строки на клиенте и передать его методу GetUsers в виде строки, а затем загрузить строку в XmlDocument() на сервере и проанализировать ее на DTO. Тогда ваша подпись метода будет выглядеть так:

MyResponse GetUsers(string userSearchXmlString, int pageno, int totalrecords); 
+0

Пожалуйста, не отправляйте XML как часть uri .. это просто неправильно. Вместо этого используйте одиночные параметры запроса и не добавляйте что-то слишком сложное. Это не то, что GET-операции для RESTful-сервисов. – user1908061

+1

«Это просто неправильно» .... поразмыслите над этим? – kmdsax

0

Похоже, вы используете WCF REST. С помощью WCF REST вы должны сами реализовать механизмы запросов, как вы пытаетесь сделать. Считаете ли вы использование ASP.NET Web API? В Web API ваш метод GetUsers() просто должен вернуть IQueryable<User> и Web API-обертывания, которые с помощью OData querying capability обрабатывают проекцию, фильтрацию, сортировку, агрегирование и подкачку.

Смежные вопросы