一文带你看懂什么是RESTful API

4,138 阅读5分钟

一、什么是API

要想知道什么是RESTful API,我们得先知道什么是API.

API(Application Programming Interface,应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。 [1] 目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问原码,或理解内部工作机制的细节。(引用自百度百科)

举个例子:比如我们去肯德基买个汉堡,不需要知道这个汉堡是怎么做出来的,你付过钱之后就能得到一个汉堡。

肯德基就是一个服务器,你就是一个客户端,钱就是你向肯德基请求获得汉堡的参数。

比如,你如果要用水,你自己不必生产水,你只需要调用水厂生产好的水就行了,水厂会把水送到你家的管道里面,你只要打开水龙头就行了,水就会出来。你打开水龙的过程就是在调用水厂的API.

调用API就是一手交钱一手交货的过程,制作汉堡则是API背后的工作。

ps:上面是说给不懂计算机的人解释API是什么。

用计算机的术语来说就是,程序使用写代码的方式访问其他人写的代码的一种渠道就是API.

比如你的程序想要支付宝的支付功能 ,你如果想要自己实现支付功能,你得去找银行对接啊,你得申请支付牌照,然后再写程序,一连串下来,你自己都可以成立一个金融公司了,但是现在你不想成立一个金融公司你只想用支付宝的支付功能,怎么办呢,你可以使用支付宝的接口,在你的程序里面调用支付功能的时候,实际上就是请求支付宝的支付功能 ,你不必考虑支付宝的支付功能是怎么做的,是用什么语言实现的,你只要按照规范请求支付宝的支付请求就行了。这就是调用支付宝的API.

二、什么是REST

REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。(引用自百度百科)

表述性状态传递,这是个啥,谁能听得懂啊,这个中英文直译我吐了。

  • REST描述的是在网络中client和server的一种交互的形式,REST不是一种协议本身没有太大的作用,实用的是如何设计 RESTful API(REST风格的接口)

为什么要使用RESTful结构呢

以前的网页都是前端和后端融在一起的,比如之前的JSP等。在之前的PC时代问题没有啥问题,但是近年来移动互联网快速发展,各种前端框架特别多,如果我们还是前后端不分离的话,一个是学习成本特别高,一个是代码的重复率太高导致我们做了很多重复的东西,代码的复用率不高,用接口的方式可以让代码的复用率变的高些,如下图所示

1576638176196.png

为什么不用普通的接口方式,比如你要从你的网站上面得到一个城市的天气,以前有可能你得这么设计

https://xxx/getWeather?city=深圳

你这样就得传两个参数给后台,这样看起来就很臃肿。

用RESTful方式设计接口你可能会这么设计

GET https://xxx/weathers/深圳

这样只需要传一个参数给后台就可以了,这样看起来很简洁,而且我们的URI中使用的是名词,而不是动词。通过HTTP动词来实现资源的跳转。具体实现方式下面说。

以上就是我们为什么要使用RESTful API结构的原因。

三、如何设计一个RESTful API结构的系统呢。

  1. URI里面使用的是名词而且不是动词,推荐使用复数,通过HTTP动词来实现资源的跳转。

    • 错误的

      /getOrders

      listCitys

      /getWeathers?city=深圳

    • 正确的

      GET /orders/1 :返回订单编号为1的订单

      POST /orders :增加一个订单

      Delete /orders/1 :删除一个订单编号为1的订单

      PUT /orders/1 :更新订单编号为1的订单

  2. 保证方法里面只做一件事,不会对资源状态有所改变。比如下面这样是不允许的

GET /updateOrder?id=1

  1. 使用正确的HTTP Status Code 表示返回的请求状态。比如

    {"code":"200"}

以上就是如何设计一个简单的RESTful API结构系统的示例。

Tips:

前后台的数据传输可以用json,可以用xml传输,我还是比较倾向于json传输比较方便

比如请求一个城市的温度,用xml返回结果是这样

<city>   
    <name>深圳</name>
    <temperature>26</temperature>
     <code>200</code>
</city>

用json返回就是这样

{
    "city":
    {
        "name":"深圳",
        "temperature":"26",
        "code":200
    }
}