java - 关于REST API的疑惑
PHPz
PHPz 2017-04-17 11:26:31
[Java讨论组]

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


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

...


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

PHPz
PHPz

学习是最好的投资!

全部回复(6)
大家讲道理

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

黄舟

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

ringa_lee

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

PHP中文网

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是一种方向。

巴扎黑

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

PHP中文网

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号