# 一文带你看懂什么是RESTful API

一、什么是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
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,563评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,694评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,672评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,965评论 1 318
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,690评论 6 413
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,019评论 1 329
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,013评论 3 449
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,188评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,718评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,438评论 3 360
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,667评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,149评论 5 365
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,845评论 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,252评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,590评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,384评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,635评论 2 380

推荐阅读更多精彩内容

  • 老婆经常喜欢翻看我订阅的技术杂志,她总能从她的视角提出很多有趣的问题。 一个悠闲的周日下午,她午觉醒来,又习惯性的...
    柳树之阅读 26,399评论 111 736
  • 一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式。”但是在要求详细讲述它所提出的各个约束,以及如...
    时待吾阅读 3,446评论 0 19
  • 去年有段时间得空,就把谷歌GAE的API权威指南看了一遍,收获颇丰,特别是在自己几乎独立开发了公司的云数据中心之后...
    骑单车的勋爵阅读 20,644评论 0 41
  • 从今天开始,我开始学习Retrofit,整体Retrofit内容如下: 1、Retrofit解析1之前哨站——理解...
    隔壁老李头阅读 6,140评论 4 46
  • 注:本文纯属个人理解的瞎扯淡,本人没有看过 Roy Thomas Fielding 关于 REST 的 论文。 1...
    佐蓝Gogoing阅读 435评论 0 2