这次我让你彻底弄懂 RESTful(下)

简介: 这次我让你彻底弄懂 RESTful(下)

HATEOAS


即 Hypermedia as the Engine of Application State 的缩写,翻译过来就是作为应用状态引擎的超媒体。


这也是 REST 提出的设计。


是不是理解不了?其实很简单。


例子我就不自己编了,抄一下 stackoverflow 回答上的例子。


比如你请求获取用户列表:

GET /users
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,
           ....省略.....
        }
    ],
    "links": [
        {
            "href": "/user",
            "rel": "create",
            "method": "POST"
        }
    ]
}


重点就是这个 links,结果会返回你能对这个资源所做的操作。

比如对于 userId 是 1 的,你调用 PUT  /user/1就是做修改这个用户,DELETE /user/1 就是删除这个用户。


最外层的 links 告诉你用 POST  /user 就能再创建一个用户。


这里还有个隐藏信息,可能看到外层的 links 没有返回 DELETE 的信息,说明此时客户端无法删除用户


所以说 RESTful API 还需要在返回此时能做资源所做的操作,这样客户端就知道它能做什么。

它也不需要管具体怎么做,反正返回里面会告诉它 DELETE 就这样这样,POST 就这样这样。


没告诉它的就是不能做的。


然后这个时候再去理解下资源的表述性状态转移,是不是感觉来了?


如果说上一 part 提到用 HTTP 的动词来指代动作, URL 仅表示资源的现实是骨感的。

那么 HATEOAS 的现实就是灰。


基本上没几家公司会这么做。


就我个人而言这玩意没啥用。


它的出发点是让客户端从响应就能得知对资源操作的入口,并且通过响应就得知哪些动作能执行。


听起来好像有点用,但是就我目前的功力,我只能看到响应变得十分冗余。


image.png


最后


这篇文章关于 RESTful API 具体的写法我就提到一些,还有挺多的就自己查资料吧。

文章的目的是为了让你理解 RESTful API,我再总结一下重点。


HTTP 是协议,不是传输通道。(对协议不理解的看我之前的 HTTP 分析)


所以协议约定了很多东西,推荐我们按照协议的用法进行客户端和服务端的交互。

也就是 RESTful 表明的面向资源,通过 HTTP 动作 + URL 上的资源。


RESTful 还提到了 HATEOAS,虽说基本上没什么公司会这样使用,但是它能让你更好的理解 REST 这个名字的含义。

RESTful 是一种风格,你是否采用这种风格对你的程序运行没有影响,类比驼峰命名来思考。

简而言之,就是不要在 URL 上表现出动作,用 HTTP 动词代表动作,URL 上只做资源,仅此而已

至于要不要严格遵循 RESTful 风格,我个人的看法是公司内部保持一致就行


巨人的肩膀


www.ics.uci.edu/~fielding/p…

www.ruanyifeng.com/blog/2011/0…

stackoverflow.com/questions/6…

en.wikipedia.org/wiki/HATEOA…



相关文章
|
2月前
|
前端开发 API 数据安全/隐私保护
深入浅出理解RESTful API设计
【9月更文挑战第5天】在数字世界的海洋里,API是连接不同软件的桥梁。本文将带你深入探索RESTful API设计的精髓,从基础概念到进阶实践,让你掌握如何构建高效、易用的后端服务接口。
|
3月前
|
缓存 API 网络架构
深入浅出:RESTful API设计原则与实践
【8月更文挑战第29天】本文旨在为读者揭示如何通过遵循一系列设计原则来创建高效、可维护和易于理解的RESTful API。我们将探讨REST架构的核心概念,并通过实际代码示例展示如何将这些原则应用于日常开发中。无论你是新手还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧,帮助你构建更好的后端服务。
|
3月前
|
Java API 开发者
针对Java开发者的RESTful API设计与实现指南
本文是一份针对Java开发者的RESTful API设计与实现指南。RESTful API采用表述性状态转移(REST)架构风格,提供无状态、统一接口的服务。在Java中,可通过Spring Boot框架快速构建RESTful API,利用Spring MVC处理HTTP请求,并支持数据绑定、验证及异常处理等功能。此外,还介绍了版本控制、安全性加强、文档编写与测试等最佳实践,帮助开发者打造高性能且可靠的API服务。
57 0
|
4月前
|
Java API 开发者
RESTful API设计与实现:Java开发者指南
RESTful API设计与实现:Java开发者指南
|
6月前
|
安全 Java API
RESTful API设计与实现:Java后台开发指南
【4月更文挑战第15天】本文介绍了如何使用Java开发RESTful API,重点是Spring Boot框架和Spring MVC。遵循无状态、统一接口、资源标识和JSON数据格式的设计原则,通过创建控制器处理HTTP请求,如示例中的用户管理操作。此外,文章还提及数据绑定、验证、异常处理和跨域支持。最后,提出了版本控制、安全性、文档测试以及限流和缓存的最佳实践,以确保API的稳定、安全和高效。
224 1
|
XML JSON API
Restful编码风格
RESTful 是一种 Web 服务设计风格,它强调使用 HTTP 协议的语义来实现资源的定义、操作和表现,通常被认为是一种简单、灵活、可扩展、易于维护和可读性高的 Web 服务设计风格
56 0
|
6月前
|
XML JSON 安全
谈谈你对RESTful API设计的理解和实践。
RESTful API是基于HTTP协议的接口设计,通过URI标识资源,利用GET、POST、PUT、DELETE等方法操作资源。设计注重无状态、一致性、分层、错误处理、版本控制、文档、安全和测试,确保易用、可扩展和安全。例如,`/users/{id}`用于用户管理,使用JSON或XML交换数据,提升系统互操作性和可维护性。
66 4
|
6月前
|
存储 缓存 API
深入理解与实践RESTful API设计
在数字化时代,RESTful API已成为应用程序之间交互的重要桥梁。本文旨在提供一个全面的指南,从RESTful API的基本概念入手,深入探讨其设计原则、最佳实践以及常见的挑战。不同于一般的技术文章仅停留在表面的介绍,我们将结合实际案例,逐步分析如何设计一个既符合REST原则又能满足现代应用需求的API。通过本文,读者不仅能够掌握RESTful API的理论知识,更能学会如何在实际项目中灵活应用,从而提升整个系统的可扩展性和维护性。
|
6月前
|
XML JSON 缓存
【前后端交互】为什么使用RestFul架构?
【1月更文挑战第15天】【前后端交互】为什么使用RestFul架构?
|
6月前
|
JSON 数据格式
基于RestFul风格编程示例
基于RestFul风格编程示例
54 0