Лучший способ закодировать QBE Restful метод? - PullRequest
0 голосов
/ 11 ноября 2010

Я работаю над разработкой некоторых веб-сервисов с использованием RESTeasy и Seam.Одна из служб, которую я хотел бы создать, - это служба Query by Example.

Сначала я попытался закодировать ее следующим образом:

@GET
@Produces("application/xml")
@Consumes("application/xml")
@Path("/matching")
public MessageList getMatchingMessages(Message msg);

Это, к сожалению, вызвало сложности в клиенте:

[testng] [Parser] Running:
[testng]   C:\Users\bdw\workspace-shepherd\GPRI\test-build\testng-Test.xml
[testng] java.lang.RuntimeException: java.lang.ClassCastException: org.apache.commons.httpclient.methods.GetMethod cannot be cast to org.apache.commons.httpclient.methods.EntityEnclosingMethod
[testng]    at org.jboss.resteasy.client.core.ClientInvoker.invoke(ClientInvoker.java:104)
[testng]    at org.jboss.resteasy.client.core.ClientProxy.invoke(ClientProxy.java:59)
[testng]    at $Proxy138.getMatchingMessages(Unknown Source)

и так далее.Вариант этого метода допускает диапазон дат, но, очевидно, не работает и в этой форме:

@GET
@Produces("application/xml")
@Consumes("application/xml")
@Path("/matching")
public MessageList getMatchingMessages(@QueryParam("startDate") Date start,
        @QueryParam("endDate") Date end, Message msg);

Когда я задумался об этом, передача сообщения методу GET может нарушитьДух ОТДЫХА.Конечно, удаление аннотации Consumes из метода позволяет клиенту работать без этих ошибок.Но напрашивается вопрос, что является правильным способом написать метод запроса, который принимает ввод без XML и вводит вывод XML?Или это берет и XML и основанные на URL параметры и производит вывод XML?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2010

Как вы думаете, вы можете кэшировать результаты? Если ответ «нет», вы можете просто использовать вместо него POST.

POST /QueryEngine
Content-Type: application/xml

=>
200 OK
Content-Type: application/xml

Если ответ, возможно, вы захотите кэшировать результаты, то вы можете сделать:

POST /QueryGenerator
Content-Type: application/xml

=>
303 See Other
Location: /GeneratedQuery/2323

GET /GeneratedQuery/2323

Сказав все это, вы уверены, что не можете просто использовать параметры запроса вместо передачи XML?

2 голосов
/ 11 ноября 2010

Я не могу помочь со стороной кодирования вашего вопроса, но если вы передаете ввод не-URL, тогда метод POST будет более подходящим, чем GET.Фактически вы создаете новый ресурс: список сообщений, соответствующих примеру.

...