1

我的客户端是一个 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 字符串。所以我的问题是……</p>

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

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

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

谢谢,加里

4

2 回答 2

1

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

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

RESTDroid 是 alpha 版本。你可以看看RoboSpice。它是一个强大的库来管理 REST 调用,但由您来管理本地和远程资源之间的持久性。

于 2013-03-18T10:48:34.050 回答
0

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

2a)忘记宗教,对所有事情都使用 GET 有什么问题?在 SOAP 服务 WCF/或经典中,您将所有请求包装到 http POST 中,因此使用单个动词最终会使用 SOAP,或者 - 甚至不要考虑 - 您自己的通信协议:-D

2b)您可以在技术上使用非空正文编写 GET 请求 - 大多数服务器默认情况下会忽略它,但阅读它在技术上会出现问题..

问题的另一部分由上面的Pcriulan回答

于 2013-03-18T11:01:44.540 回答