2012-09-26 36 views
1

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

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

但是,当我发布有关在REST中执行相同操作的问题时,我被告知应该将我的服务仅限于GET,PUT,POST和DELETE。而且我应该只根据RFC2616做什么是“正确的”。有些人几乎用一种宗教的方式来谈论这一点。

伪造宗教信仰,对一切都使用GET有什么问题?或者对所有东西都使用POST有什么问题?我所做的不属于简单的RFC2616类别。例如,我正在通过一辆在汽车上旅行的一千条腿,并且我得到了另一个版本的旅行,其中出现了不稳定的GPS错误。或者,我用英语发送一个对话,然后用德语回复对话。

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

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

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

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

谢谢,加里

回答

1

使用好HTTP动词是非常有用简单地知道,当你请求失败(例如),或者只是做一些具体的东西做什么。如果您发送POST请求,则隐含地假设您必须解析资源才能获取通过请求正文发送的流。另一方面,当您通过GET检索数据时,假设请求将作为流映射到您的模型,pojo或其他任何内容发送给您。我建议你使用库如RESTDroid。您可以发送POJO并接收POJO。这是一个“资源导向型”库,因此您可以随时知道某个特定本地资源是否已远程同步。本地和远程之间的数据持久性是自动处理的。

RESTDroid是alpha发布。你可以看看RoboSpice。它是管理REST呼叫的强大库,但是由您来管理本地和远程资源之间的持久性。

0

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

2a)伪造宗教信仰,对一切都使用GET有什么问题? 在SOAP服务WCF /或古典中,您将所有请求包装到http POST中,因此使用单个动词将最终达到SOAP或 - 甚至不考虑它 - 您自己的通信协议:-D

2b)您可以技术上组成与非空身上GET请求 - 大多数服务器在默认情况下忽略它,虽然它在技术上是有问题的读它..

问题的另一部分被Pcriulan上述

回答