【问题标题】:Using REST to Send and Receive Complex Data使用 REST 发送和接收复杂数据
【发布时间】:2012-09-26 20:56:49
【问题描述】:

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

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

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

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

谢谢,加里

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-06
        • 2020-02-09
        • 2019-09-12
        • 1970-01-01
        • 2012-05-09
        • 1970-01-01
        • 1970-01-01
        • 2011-10-24
        相关资源
        最近更新 更多