为了账号安全,请及时绑定邮箱和手机立即绑定

RESTful编程到底是什么?

RESTful编程到底是什么?

慕后森 2019-05-30 16:35:54
RESTful编程到底是什么?RESTful编程到底是什么?
查看完整描述

4 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

对基本资源的请求/可能会返回如下内容:

请求

GET /
Accept: application/json+userdb

反应

200 OK
Content-Type: application/json+userdb

{
    "version": "1.0",
    "links": [
        {
            "href": "/user",
            "rel": "list",
            "method": "GET"
        },
        {
            "href": "/user",
            "rel": "create",
            "method": "POST"
        }
    ]
}

我们从媒体的描述中得知,我们可以从称为“链接”的部分找到有关相关资源的信息。这叫做超媒体控件。在这种情况下,我们可以从这样的部分判断,我们可以通过发出另一个请求来找到一个用户列表。/user:

请求

GET /user
Accept: application/json+userdb

反应

200 OK
Content-Type: application/json+userdb

{
    "users": [
        {
            "id": 1,
            "name": "Emil",
            "country: "Sweden",
            "links": [
                {
                    "href": "/user/1",
                    "rel": "self",
                    "method": "GET"
                },
                {
                    "href": "/user/1",
                    "rel": "edit",
                    "method": "PUT"
                },
                {
                    "href": "/user/1",
                    "rel": "delete",
                    "method": "DELETE"
                }
            ]
        },
        {
            "id": 2,
            "name": "Adam",
            "country: "Scotland",
            "links": [
                {
                    "href": "/user/2",
                    "rel": "self",
                    "method": "GET"
                },
                {
                    "href": "/user/2",
                    "rel": "edit",
                    "method": "PUT"
                },
                {
                    "href": "/user/2",
                    "rel": "delete",
                    "method": "DELETE"
                }
            ]
        }
    ],
    "links": [
        {
            "href": "/user",
            "rel": "create",
            "method": "POST"
        }
    ]
}

从这个反应中我们可以看出很多。例如,我们现在知道我们可以通过以下方式创建一个新用户POST使./user:

请求

POST /user
Accept: application/json+userdb
Content-Type: application/json+userdb

{
    "name": "Karl",
    "country": "Austria"
}

反应

201 Created
Content-Type: application/json+userdb

{
    "user": {
        "id": 3,
        "name": "Karl",
        "country": "Austria",
        "links": [
            {
                "href": "/user/3",
                "rel": "self",
                "method": "GET"
            },
            {
                "href": "/user/3",
                "rel": "edit",
                "method": "PUT"
            },
            {
                "href": "/user/3",
                "rel": "delete",
                "method": "DELETE"
            }
        ]
    },
    "links": {
       "href": "/user",
       "rel": "list",
       "method": "GET"
    }
}

我们还知道,我们可以改变现有的数据:

请求

PUT /user/1
Accept: application/json+userdb
Content-Type: application/json+userdb

{
    "name": "Emil",
    "country": "Bhutan"
}

反应

200 OK
Content-Type: application/json+userdb

{
    "user": {
        "id": 1,
        "name": "Emil",
        "country": "Bhutan",
        "links": [
            {
                "href": "/user/1",
                "rel": "self",
                "method": "GET"
            },
            {
                "href": "/user/1",
                "rel": "edit",
                "method": "PUT"
            },
            {
                "href": "/user/1",
                "rel": "delete",
                "method": "DELETE"
            }
        ]
    },
    "links": {
       "href": "/user",
       "rel": "list",
       "method": "GET"
    }
}

注意,我们使用的是不同的HTTP谓词(GETPUTPOSTDELETE(等等)为了操纵这些资源,我们认为客户所掌握的唯一知识就是我们的媒体定义。



查看完整回答
反对 回复 2019-05-30
?
白衣非少年

TA贡献1155条经验 获得超0个赞

这就是它看起来的样子。

创建一个具有以下三个属性的用户:

POST /user
fname=John&lname=Doe&age=25

服务器响应:

200 OK
Location: /user/123

将来,您可以检索用户信息:

GET /user/123

服务器响应:

200 OK
<fname>John</fname><lname>Doe</lname><age>25</age>

若要修改记录(lnameage将保持不变):

PATCH /user/123
fname=Johnny

更新记录(因此lnameage将为空):

PUT /user/123
fname=Johnny


查看完整回答
反对 回复 2019-05-30
  • 4 回答
  • 0 关注
  • 842 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信