范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

为什么少有人使用RESTfulAPI?

  RESTful API
  想要回答这个问题,首先得知道RESTful风格的API是什么样的。
  其实关于RESTful的基本概念,在这就不再赘述了。
  接下来看看一个完整的RESTful API是怎么形成的。Richardson Maturity Model
  Leonard Richardson提出了一种以他命名的模型Richardson Maturity Model,循序渐进的介绍了迈向RESTful的不同等级。
  但需要强调的是,RMM虽然是思考RSET的一个好方法,但它不是REST的定义。RMM有用的地方只是在于它提供了一个很好的step by step的方法来理解REST思想背后的基本理念。Level 0
  这是最基本的等级,在这等级中只是简单的使用HTTP作为远程交互的传输隧道,而不是当成传输协议来使用,不涉及任何web的机制。举个例子:
  我今天约了小伙伴打羽毛球,于是发起一个请求向体育馆询问哪个时间段可以预定羽毛球场。POST /stadiumReception HTTP/1.1 [various other headers]  {     "date": "2022-01-05",     "sport": "badminton" } 复制代码
  前台返回今天羽毛球场可以预定的时间段HTTP/1.1 200 OK [various headers]  {     "times": [         {             "start": "1400",             "end": "1600"         },         {             "start": "1700",             "end": "1830"         }     ] } 复制代码
  得到时间段信息,再约一下时间,决定预定17点到18点半,打完吃饭。POST /stadiumReception HTTP/1.1 [various other headers]  {     "date": "2022-01-05",     "sport": "badminton",     "start": "1700",     "end": "1830" } 复制代码
  预定成功!HTTP/1.1 200 OK [various headers]  {     "orderId": "123456789" } 复制代码
  可以看到这是非常典型的JSON RPC格式,当然在实际开发中API设计要比这好很多。Level1:面向资源
  在RMM模型(Richardson Maturity Model)中迈向REST顶点的第一步就是面向资源,所以把独立资源替代单一的接口节点。
  因此,可能会将不同运动,比如羽毛球等抽象为独立的资源。所以请求修改为如下:POST /sports/badminton HTTP/1.1 [various other headers]  {     "date": "2022-01-05" } 复制代码
  询问某个日期,羽毛球场的可预定时间。HTTP/1.1 200 OK [various headers]  {     "times": [         {             "start": "1400",             "end": "1600",             "id": "123456789"         },         {             "start": "1700",             "end": "1830",             "id": "987654321"         }     ] } 复制代码
  返回比原有基础上增加了单独的id,可以表示羽毛球场的特定空闲时间段。
  这时就能选定某个时间段,将其id向预约接口预定。POST /reservations/987654321 HTTP/1.1 [various other headers] 复制代码
  预定成功!HTTP/1.1 200 OK [various headers]  {     "orderId": "abcd987654321" } 复制代码
  可以看到与level0最大的不同就是对单一的节点做操作,变成了对不同的资源做操作。Level2:HTTP动词
  Level2,真正将HTTP作为了一种传输协议,最直观的一点就是Level2使用了HTTP动词,GET/PUT/POST/DELETE/PATCH等,这些都是HTTP的规范,规范的作用自然是重大的,用户看到一个POST请求,就知道它不是幂等的,使用时要小心。而看到GET,就知道它是幂等的,调用多几次都不会造成问题,当然,这些的前提都是API的设计者和开发者也遵循这一套规范。
  所以对于询问某个日期,羽毛球场的可预定时间,可改为GET /sports/badminton/20220105?status=idle HTTP/1.1 [various other headers] 复制代码
  HTTP将GET定义为安全操作,这意味着它不会对任何状态进行更改。所以我们可以任意多次调用GET,并每次都能得到相同的结果。而且web还会缓存GET请求与结果,这是Web架构工作良好的关键因素。
  返回结果一样的,接着我们预定一个时间段。POST /reservations/987654321 HTTP/1.1 [various other headers] 复制代码
  请求不变,但返回却改变了。如果一切顺利,服务将返回一个201响应码,表示有一个新资源产生了。HTTP/1.1 201 Created Location: orders/abcd987654321 [various headers]  {     "orderId": "abcd987654321" } 复制代码
  201响应还包括了Location属性,指明客户端可以使用该属性的URL来获取该订单资源的最新状态。
  如果出现错误,例如其他人预订了该时段,则:HTTP/1.1 409 Conflict [various headers]  {     "error": "该时间段已被预定" } 复制代码
  此响应的重要部分是使用正确的HTTP响应码来表示出错的地方。在该场景中,409是一个很好的选择,表明其他人已经以互斥的方式更新了资源。 在Level 2,我们明确使用某种类型的错误响应,而不是使用返回码200但包含错误响应。Level3:HATEOAS
  HATEOAS(Hypertext As The Engine Of Application State),中文翻译为"将超媒体当作应用状态引擎",这个描述的核心是超媒体概念,换句话说:是链接的思想。
  从Level2的请求开始:GET /sports/badminton/20220105?status=idle HTTP/1.1 [various other headers] 复制代码
  返回的信息是与Level2不同的HTTP/1.1 200 OK [various headers]  {     "times": [         {             "start": "1400",             "end": "1600",             "id": "123456789",             "link": "/reservations/123456789"         },         {             "start": "1700",             "end": "1830",             "id": "987654321",             "link": "/reservations/987654321"         }     ] } 复制代码
  每个时间段现在都有一个link元素,其中包含一个URI,告诉我们如何预约。超媒体控制的要点是,告诉我们下一步可以做什么,以及我们需要操作的资源URI。我们不必知道预约的请求发到哪里去,响应中的超媒体控制会告诉我们怎么去做。
  预约请求仍用回level2的POST /reservations/987654321 HTTP/1.1 [various other headers] 复制代码
  回复中包含了许多超媒体控制,用于下一步要做的不同事情。HTTP/1.1 201 Created Location: orders/abcd987654321 [various headers]  {     "orderId": "abcd987654321",     "link": {         "rel": "delete",         "uri": "/orders/abcd987654321"     } } 复制代码
  返回提供了如何取消该订单。
  Level3的Restful API,给使用者带来了很大的便利,使用者只需要知道如何获取资源的入口,之后的每个URI都可以通过请求获得,无法获得就说明无法执行那个请求。RESTful的缺点
  需要强调的一点是,RESTful不是一种规范,而是一种风格,它是不具有强制性的。所以风格这种东西说不准,公说公有理,婆说婆有理。就算是相同水平的程序员设计的"RESTful"也很难一样。而在开发团队中,最忌讳的就是不统一!
  1、RESTful是面向资源的,所以接口都是一些名词,尤指复数名词。简单的CRUD还是很合适的,但很多业务逻辑都很难将其抽象为资源。比如说登录/登出,怎么看也不是一个资源,如果硬是抽象为创建一个session/删除一个session。这不仅反直觉,还违背了RESTful的思想。
  2、RESTful只提供了基本的增删改查,对于复杂的逻辑是一点办法没有,比如批量下载、批量删除等。对于复杂的查询,更是无从下手。而且开发时会面临诸多选择,修改资源用PUT还是PETCH?采用查询参数还是用body?
  3、关于错误码的问题更是复杂的一批,RESTful建议使用status code作为错误码,以便统一。在实际开发中,业务逻辑的含义数不胜数,很难统一。比如400状态码到底是表示传参有问题,还是该资源已被占用了。404是表示接口不存在,还是资源不存在。
  发展到最后,开发人员的时间精力都不是用于怎么实现这个逻辑,而是变成了纠结这逻辑到底是个什么资源?把时间都给浪费掉,最后还给出了一个不伦不类的"RESTful"API。
  最重要一点是RESTful与RPC没有高低之分,所有的代码规范、接口设计以及各种规定,其实都是为了在团队内部形成共识、防止个人习惯差异引起的混乱。相比之下形成JSON-RPC规范相对容易以及更方便使用。
  就算团队里面规定必须用动作表示URL,所有请求都要使用POST,这也是没问题的。
  所以无论是RESTful还是RPC,归根到底还是为了开发人员和产品应用服务的,如果它能带来便利、减少混乱,就值得用;反之,如果带来的麻烦比要解决的还多,那就duck不必了。
  作者:zhangwinwin
  链接:https://juejin.cn/post/7051801217705443341

荣耀Magic3和小米IMX4怎么选择购机?肯定先MIX4如今这两款你手机都发布了,小米mix4手机更多是小米的科技探索的产品,而荣耀Magic3系列是针对荣耀的高端手机探索的产品!小米mix4更多强调的是手机的性能优势以及全球变暖会不会引发新仙女木事件呢?首先介绍一个概念温盐环流。这个神奇的环流,保护着地球能量的平衡。来,我们继续来脑洞大开,做这样一个逆向的思考。假设,全球的气温升高了。会怎么样呢?极地的冰化了!冰水,没有那么咸,对七夕节你还在送口红香水吗?七夕给心爱的TA送什么礼物呢?口红?香水?拜托,不要这么直男了,好吗?今年七夕,为生活在数码时代的TA送上一份怎样的礼物呢,我们为你做了这些选择,你能选上吗?无线桌面音箱篇桌面音箱优势大盘点!iOS对比安卓,究竟哪点更强?前文我们说到,虽然iOS很优秀,但在市场占有率上一直是敌不过安卓的,我也简单分析了一下安卓系统在体验上有什么优势。但iOS一直没有被占据,也是有一定优势所在的,现在咱们再来说说,i2021下半年,TWS真无线耳机主打降噪还好使吗?雷柏Ti100现身说法实话实说啊,2021下半年的TWS有什么新东西吗?好像有,又好像没有。高端耳机都在收窄用户群体,主打自己的生态,而普通用户购买第三方适配的TWS真无线耳机,除了蓝牙5。1低延迟和单iQOONeo5深度评测高帧闪充,手握两大利刃如今的手机市场对于游戏爱好者来说其实很友好了,如果你没有追求顶级旗舰的执念,实际上在2K左右的价位就已经能够买到一部流畅玩游戏的次旗舰机型。这得益于前几年高端硬件的下放大趋势,主打蒸烤消储,双腔同步!PConline权威测评金帝双腔蒸烤消集成灶在房价高涨的当下,寸土寸金的住房面积让厨房空间一步步被压缩,但小巧的厨房并不能阻止我们对美好生活的追求,洗碗机蒸烤箱消毒柜还有各式各样的家电产品在为我们打造品质生活的同时,也让本就美国能管住比特币吗?比特币去中心化,所以美国没法换。第一点比特币等虚拟货币。美元计价,可以蓄水美国超发的美元。这点无疑美国是非常喜欢的。蓄水,震旦,收割。完美!第二点比特币作为一种去中心化的商品。可以荣耀magic3系列magic3pro超乎想象优化的888plus超级的拍照性能百倍变焦88的tof对焦百倍长焦I68的防水防尘magicui5。0还有我最喜欢的3D前置镜头和华为一模一样悄悄告诉你注人类高质量七夕送礼攻略!从手机潮品到美妆都有,女生看了会心动距离七夕节越来越近,想必不少男同胞都在精心为女神准备礼物中,但往往不少直男也犯了难今年又该送什么?其实对于这个一年一度的传统情人节,女同胞们可不希望接收的礼物很传统,毕竟现在新兴消腾讯音乐失去独家版权,网易云却准备上市,丁磊的机会来了?中国数字音乐的发展已经走过了十多年的历程,人们听音乐的渠道和方式都多了很多。说到国内数字音乐市场的大佬,深受90后00后欢迎的网易云音乐和财大气粗拥有众多音乐版权的腾讯音乐当仁不让
ETF的大门正在向BTC敞开ETF的大门正在向BTC敞开当一件商品以ETF的形式出现,便意味着它的合规性和成熟度获得了市场的高度认可。ETF通过实物担保的形式进行资产证券化,投资者通过持有基金份额便等于间接持美国首支比特币期货ETF,首日成交额创历史次高10月19日,由美国金融服务商ProShares提供的首支比特币期货ETF(股票代码为BITO)在纽交所敲钟上市,比特币史上里程碑式的一刻伴随钟声正式开启!首日成交额创下历史次高记哈萨克斯坦限制加密采矿,以缓解电力消耗近日,哈萨克斯坦国家电网运营商KEGOC在3家大型燃煤电厂关闭后宣布限电,称已经开始限制对该国最大的消费者加密矿工进行电力配给。哈萨克斯坦限制加密采矿,以缓解电力消耗哈萨克斯坦因极比特币的下一个拐点在9万美元附近10月20日,比特币价格迎来历史高点,继4月份达到64889美金之后,于前日突破新高,创造出6。7万美金的历史高位。比特币的下一个拐点在9万美元附近有分析师在周三的一份报告中表示比一对力求表现完美的书架箱自然声NS17试听报告这篇评测并非自己写的,自己只是转过来,供对NS17感兴趣的朋友参考!转的过程中补充一些照片方便大家阅读,并修订行文中的一些小错误。其它则不做改变!Lqdxy是自己网上认识了十余年的比亚迪特斯拉接连涨价,接下来到谁了?近段时间以来不少国家和地区出现资源短缺问题国内消费者又在喊什么都在涨,就工资不涨群众消费压力增加当然现在房价不涨了轮到汽车价格涨了以往汽车是属于不保值的大件物品现在连二手车的价格都外出旅游的驴友别忘了自己的这项特权因为家人都特别喜欢外出旅游,每个季节几乎都会外出旅游一次,欣赏不同季节的各大著名景点,最近又到了全国大部分地区欣赏红叶秋景的季节,今年我们全家也提前制定了旅游计划,目的地就是川西高华夏在线五周年文艺汇演暨2021年京华杯舞蹈大赛初赛在京落幕2021年10月16日,华夏在线北京分公司庆祝公司五周年魅力华夏精彩北京文艺汇演初赛在北京市东城区东图剧场举行。本次大赛由华夏在线保险代理服务有限公司北京分公司主办,腾讯视频优酷视比亚迪代工的松散机车,到底是什么来头?松散机车SongSanMotors一家致力于机车个性化改装美式风格国产品牌早年间主要生产大排量定制化美式巡航机车属于一家比较小众私人订制品牌SSSUMMER延续了家族式一贯的复古风数字化对ERP的重构价值及其未来趋势在智慧零售与餐饮进行的企业数字化调研报告中,关于未来企业数字化建设35年规划中,对于重构企业业务流程,重构企业资源管理系统ERP的目标较为明确。ERP的核心价值由于ERP的数据处理双频USB接口WiFi模块在视频传输中的优势作为无线模块WiFi模块蓝牙模块研发厂家,SKYLAB经常接到有关WiFi模块蓝牙模块应用选型和基于WiFi模块蓝牙模块解决方案设计的相关问题。其中就有问到视频传输应用中的WiFi