如果客户端除了起始URL之外应该没有任何先验知识,那么如何构建REST客户端?

时间:2012-08-22 23:19:25

标签: java flash rest web-applications client

我已经开始研究预先存在的REST应用程序,并且无法理解如何创建RESTful客户端?

wikipedia上的页面说明了以下内容

“客户端仅通过服务器在超媒体内动态识别的操作进行状态转换(例如,通过超文本中的超链接)。除了应用程序的简单固定入口点之外,客户端不会假设任何特定操作可用对于之前从服务器收到的表示中描述的任何特定资源。“

如果所有客户端都可以假设是一个起始URL,那么除了在浏览器中运行的纯HTTP休息服务之外,客户端如何知道如何显示返回的任何信息。

例如,java / flash客户端必须假设返回了哪些数据才能知道如何显示它,广告当然实现将不再是宁静的?

感谢您的任何见解。

1 个答案:

答案 0 :(得分:3)

状态转换与告诉客户端如何显示信息之间存在差异。在HTTP中,数据类型通常由Content-Type头字段确定,客户端根据该字段决定如何显示它(例如,浏览器将请求text/html并呈现结果)。 REST并不假设数据是自描述的,只是它们应该通过URI进行语义连接。维基页面指出,如果您在application/json请求http://example.com,它将返回以下内容:

{
    "users" : "http://example.com/users",
    "todos" : "http://example.com/todos"
}

现在您知道请求获取待办事项列表的URI以及http://example.com/todos的请求可能返回如下内容:

[
    {
        "description" : "Do dishes",
        "user" : "http://example.com/users/20"
    },
    {
        "description" : "Do dishes",
        "user" : "http://example.com/users/42"
    }
]

用户密钥不是仅返回id,而是引用连接用户资源的实际URI,因此您可以直接请求它。