使用REST发送和接收复杂数据

时间:2012-09-26 20:56:50

标签: android json rest asp.net-web-api

我的客户端是Android应用,我的服务是asp.net web api。我是唯一使用我服务的人。我试图在Android-REST世界中复制我在Microsoft Windows Phone 7 / WCF SOAP世界中已经做过的事情。我有很多方法都接收复杂的对象并返回复杂的对象。

WCF-SOAP世界很简单。您可以传递任何所需的复杂参数,并返回所需的任何复杂结果。从逻辑上讲,它只是一个远程过程调用。

但是当我发布关于在REST中做同样事情的问题时,我被告知我应该将我的服务限制为GET,PUT,POST和DELETE。根据RFC2616,我应该只做“适当”的事情。有些人几乎以宗教的方式谈论这一点。

关于宗教信仰,使用GET来解决一切问题是什么问题?或者为一切使用POST有什么问题?我所做的不属于简单的RFC2616类别。例如,我正在通过汽车行程的一千条腿,我正在回到另一个版本的旅行,平滑的GPS错误被平滑了。或者,我正在用英语发送一个对话,然后用德语回复对话。

在android客户端中,我想通过HTTP发送的对象已经使用Google-GSON序列化为json字符串。所以我的问题是......

如何在GET或POST中将这些json字符串作为参数发送到我的REST服务?

对我所有的REST服务调用只使用所有GET(或所有POST)是否可行且可行,我该怎么做?

我在sending a json string in a http url发布了一个更实用的问题,因为我找不到任何通过http GET或POST发送json字符串的示例。

谢谢,加里

2 个答案:

答案 0 :(得分:1)

使用好的HTTP动词非常有用,只需要知道在请求失败时(例如)要做什么,或者仅仅做一些特定的事情。如果您发送了POST请求,则隐含地假设您必须解析您的资源以获取通过请求的正文发送的流。另一方面,当您通过GET检索数据时,假设该请求将作为您将映射到您的模型,pojo或其他任何内容的流发送回给您。

我建议您使用RESTDroid之类的库。您可以发送POJO并接收POJO。它是一个“面向资源”的库,因此您可以随时了解特定的本地资源是否可以远程同步。本地和远程之间的数据持久性将自动处理。

RESTDroid已发布alpha版。您可以查看RoboSpice。它是管理REST调用的强大库,但您可以自行管理本地和远程资源之间的持久性。

答案 1 :(得分:0)

1)WCF-SOAP世界很简单。您可以传递任何所需的复杂参数,并返回所需的任何复杂结果。从逻辑上讲,它只是一个远程过程调用。 - 在REST中:“你可以传递你想要的任何复杂参数,并返回你想要的任何复杂结果。

2a)关于宗教信仰,使用GET来解决一切问题是什么问题? 在SOAP服务WCF /或经典中,您将所有请求包装到http POST中,因此使用单个动词最终会导致SOAP或 - 甚至不考虑它 - 您自己的通信协议:-D

2b)从技术上讲,你可以用非空体构成GET请求 - 大多数服务器默认忽略它,但读取它会在技术上有问题。

问题的其他部分由上面的Pcriulan

回答