这次我让你彻底弄懂 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…



相关文章
|
5天前
|
安全 API 网络架构
深入理解RESTful API设计与实现
【4月更文挑战第5天】在现代Web开发中,构建清晰、可扩展且易于维护的后端服务至关重要。本文将深入探讨RESTful API的设计原则和实践,通过分析其与HTTP协议的协同工作方式,揭示如何构建符合REST架构风格的API。我们将从资源的概念出发,讨论如何使用正确的HTTP方法、状态码以及URI结构来提升API的可用性和性能。同时,文章也将涉及版本控制策略、错误处理以及安全性考虑等方面,为开发者提供一个全面而深入的RESTful API设计指南。
|
5天前
|
存储 缓存 JavaScript
深入理解RESTful API设计原则与实践
【5月更文挑战第7天】在现代Web服务开发中,表述性状态传递(REST)是一种广泛采用的架构风格,用于构建可扩展的网络应用程序接口(APIs)。本文将探讨RESTful API的核心设计原则,并通过具体实例展示如何实现一个符合REST约束的后端服务。我们将讨论资源的识别、客户端-服务器通信模式、无状态性、以及统一接口的重要性,并探索如何使用当前的流行技术栈来实现这些概念。
|
5天前
|
XML JSON 安全
谈谈你对RESTful API设计的理解和实践。
RESTful API是基于HTTP协议的接口设计,通过URI标识资源,利用GET、POST、PUT、DELETE等方法操作资源。设计注重无状态、一致性、分层、错误处理、版本控制、文档、安全和测试,确保易用、可扩展和安全。例如,`/users/{id}`用于用户管理,使用JSON或XML交换数据,提升系统互操作性和可维护性。
20 4
|
7月前
|
XML JSON API
Restful编码风格
RESTful 是一种 Web 服务设计风格,它强调使用 HTTP 协议的语义来实现资源的定义、操作和表现,通常被认为是一种简单、灵活、可扩展、易于维护和可读性高的 Web 服务设计风格
29 0
|
5天前
|
存储 缓存 API
深入理解与实践RESTful API设计
在数字化时代,RESTful API已成为应用程序之间交互的重要桥梁。本文旨在提供一个全面的指南,从RESTful API的基本概念入手,深入探讨其设计原则、最佳实践以及常见的挑战。不同于一般的技术文章仅停留在表面的介绍,我们将结合实际案例,逐步分析如何设计一个既符合REST原则又能满足现代应用需求的API。通过本文,读者不仅能够掌握RESTful API的理论知识,更能学会如何在实际项目中灵活应用,从而提升整个系统的可扩展性和维护性。
|
5天前
|
缓存 安全 API
深入理解Web开发中的RESTful API设计
在当今快速演进的技术世界中,RESTful API已成为构建现代Web应用不可或缺的一部分。它不仅促进了前后端的分离发展,还为不同平台间的数据交换提供了一种高效、标准化的方式。本文旨在深入探讨RESTful API的设计原则和最佳实践,通过具体示例说明如何设计易于维护、可扩展和安全的API。我们将从REST的基本概念出发,逐步深入到资源命名、HTTP方法的恰当使用、状态码的选择、以及安全性考虑等方面,为读者提供一个全面而深入的视角,帮助大家更好地理解和运用RESTful API。
|
5天前
|
JSON 数据格式
基于RestFul风格编程示例
基于RestFul风格编程示例
32 0
|
XML JSON 前端开发
Restful概念
Restful概念
71 0
|
缓存 API
小满nestjs(第七章 RESTful 风格设计)
RESTful 是一种风格,在RESTful中,一切都被认为是资源,每个资源有对应的URL标识. 不是标准也不是协议,只是一种风格。当然你也可以不按照他的风格去写。
95 0
小满nestjs(第七章 RESTful 风格设计)
|
JSON 前端开发 Java
Restful风格的编程
Restful风格的编程
192 0
Restful风格的编程