素材牛VIP会员
关于REST API的疑惑
 销***表  分类:Java代码  人气:1062  回帖:6  发布于6年前 收藏

很早就听说REST这个词,但是一直也没有深入去了解过。
今天在网上大概搜了一下,wiki上面有一个使用范例,不太清楚,特来提问。


一个简单的网络商店应用,
列举所有商品,
GET http://www.store.com/products
呈现某一件商品,
GET http://www.store.com/products/12345
下单购买,
POST http://www.store.com/order/

...


难道这样就实现了REST,这种请求方式有什么特别的地方吗?
希望有人能帮我详细分析一下这样做有什么好处,谢谢

 标签:restjava

讨论这个帖子(6)垃圾回帖将一律封号处理……

Lv5 码农
38***38 职业无 6年前#1

通俗易懂,顶你个~~!!!

Lv4 码徒
这***3 站长 6年前#2

REST

REST之前的old time

REST充分利用了http的method(GET,POST,PUT,PATCH,DELETE,HEAD,OPTION...),如果题主以前写过web api的话肯定有做过CRUD的东西,在没有rest之前所有的操作基本都是通过GET,POST来实现的,免不了要用一些附加的机制来判断你的业务。

所谓的附加机制

url上

例如删除可能 POST /book/delete?id=XXX (not use get!),新建可能 POST /book/add,在以前api的设计可能是这样的,http协议中有N多的method,可我们大部分时间只用到了get,post(head,option也默默的用到了,可能你不知道而已)

后端实现上

以django为例(python的一个web框架),django view默认提供了GET,POST方法,这样就拿上面的例子来说如果用url映射(2个url)就要写俩类,如果用url正则,那么在一个类的post里面就要判断 if xxx == delete 巴拉巴拉,这会让你多做一些判断的工作

为什么不把判断交给http协议呢?

REST的横空出现

首先REST充分利用了http协议,CRUD --> POST,GET,PUT,DELETE,每个动作对应一个http的method,REST认为网络上所有的东西都是资源,而资源就应个是可以跨域的!既然对于每个资源的CRUD都有一个http method对应,那么url上就可以很自然的设计:

GET /books 拿到books的list
GET /books/id 拿到具体的某本书
POST /books 添加一本书
PUT /books/id 修改某书的信息(全部字段)
PATCH /books/id 修改某书的信息(某几个字段)
DELETE /books/id 删除某本书

不仅是后端,前端共同看到的接口变少了,方便记忆使用,也更适合爬虫们在你的web上逛,具体的实现还以django为例子 django rest在django的基础上,对于不同的http method有不同的对应方法,也就是说GET,POST,PUT,DELETE,都可以直接处理,这样代码的实现少了很多判断,url的设计更加清晰,这些乱七八糟的判断就由程序员层面上升到HTTP协议和你的web框架来处理,省事儿,url更清晰。

当然完全符合RESTful的的url设计也只是一种理想状态,提出可以根据自己的需求来设计完成具体的业务,rest是一种方向。

Lv2 入门
高***售 JAVA开发工程师 6年前#3

REST类似一种最佳实践,不是一种技术。把Internet上的内容、服务等所有东西看成一个资源并对应一个url,把HTTP的方法对应到资源的操作。这样的最佳实践符合Internet和HTTP最初的设计思想,因此会有与生俱来的优点。如果想弄清楚REST的好处,需要重新思考下HTTP协议本身,并结合自己的开发经验自己总结分析一下。

Lv1 新人
记***香 站长 6年前#4

我也推荐一片文章 《理解RESTFul架构》

Lv5 码农
38***38 职业无 6年前#5

所谓rest的精髓就是把url当作一种资源,一种传递变量的资源。至于如何no repeat yourself,在于如何设计这种利用url的方式。 ruby on rails的crud可以借鉴一下。

Lv6 码匠
15***57 UI设计师 6年前#6

REST背后蕴含的巨大信息一两句话是说不清楚的。
来读这篇文章《理解RESTful架构》,以及文章中提到的Roy博士的论文。

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取