java - 关于REST API的疑惑
PHPz
PHPz 2017-04-17 11:26:31
0
6
386

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


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

...


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

PHPz
PHPz

学习是最好的投资!

reply all (6)
大家讲道理

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

    黄舟

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

      左手右手慢动作

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

        洪涛

        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博士的论文。

            洪涛

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

              Latest Downloads
              More>
              Web Effects
              Website Source Code
              Website Materials
              Front End Template
              About us Disclaimer Sitemap
              php.cn:Public welfare online PHP training,Help PHP learners grow quickly!