为什么应该使用RESTful Web服务设计

你可能负责一个API。也许你正准备投入制作一个,并且很期待开始。但是要小心,因为好的API设计可能很难。

当涉及到设计一个好的API时,有很多事情需要考虑。与设计web用户界面不同,您可能不知道所有客户端的用例。或者在不同的平台上有不同的客户端。如果您选择自己的惯例而不是选择现有的范例,那么这个困难就会被放大。不要这样做。你会冒着把大量时间花在考虑不重要的事情和忽略重要的事情上的风险。

我喜欢基于HTTP的RESTful web服务的原因之一是,它驱使我思考API的重要需求。我也不会花太多时间去考虑那些无聊的惯例,比如“我怎么告诉用户哪里出了问题?”相反,我想,“我如何告诉消费者他们的验证失败了?”答:400状态码。完成了。稍后我将给出更多示例,但首先,重要的是要记住,除了RESTful web服务之外,还有更多范例存在。

在我们深入探讨可用的选择之前,您如何知道选择哪种API设计范式?做这个决定可能很棘手。为了让事情变得简单一点,菲尔·斯特金有一些很好的建议,我将在这里重述。这里提到了三种流行的范例:gRPC、基于HTTP的REST和GraphQL。它们不是竞争对手,而是填补了不同的利基市场。

gRPC非常适合内部api或与客户端紧密合作的api。

当客户机有非常相似的需求和工作流,并且可能在不同的平台上时,在HTTP上REST非常好。

当带宽很贵,并且您不确定客户需要什么时,GraphQL很不错。当您不需要服务器指定的缓存和其他这样的协议时,它也值得一看。

在进一步深入之前,花一些时间对可用资源进行一些分析。

一旦您确定HTTP上的REST是正确的选择,让我们来看看RESTful web服务的一些方面,它们可以让您深入了解优秀的API设计。

1. RESTful Is Resourceful

我喜欢rest式服务如何迫使我从资源的角度考虑问题。资源只是在API中表示的东西。它不一定是数据库表,甚至也不一定是域模型实体。它构建了整个API。将您的API看作是您的使用者可以操作的一组资源。平静的心态鼓励你去思考真正重要的事情。

除此之外,只有有限的方法可以对这些资源进行操作:GET、POST、PUT、PATCH和DELETE。有一些其他的应用,但这些是大的。这并不意味着您的整个API将变成CRUD(创建、读取、更新、删除)。这意味着您将首先关注系统中的内容,然后关注系统执行的操作。

2. Form Over Function

在采用HTTP服务时,采用已知模式(如JSON模式)也是有益的。基于rest的服务真正打开了一扇门,可以选择一个健壮的模式规范,它周围有很多工具。在向消费者展示数据方面,我发现这比我自己的系统要好得多。使用JSON模式这样的已知数据建模,消费者可以很容易地知道他们要返回的数据的形状。您还可以让他们知道是否需要请求字段。您的消费者甚至可以从中创建验证器。

3. RestFUL, Not REST

通常情况下,完全休息和使用超媒体并不常见。然而,使用RESTful服务可以帮助我考虑我的消费者将如何使用我的API。即使链接没有拼写出来,我也经常从入口点出发,通过连接的资源链来理解我的消费者可能如何使用我的API。这可以帮助我找到丢失的资源或没有意义的资源。

4. RESTful 有助于填补这些空白

一旦我有了资源,我发现浏览一下主要的方法很有帮助:GET、POST、PUT、PATCH和DELETE。这让我看到资源是否为只读的。我可以编辑现有的还是只创建新的?也许资源足够大,需要通过补丁进行部分更新。消费者应该能够移除它吗?这些是我经常使用的问题。

5. 想想以前那些使用返回错误状态码的API

我发现查看HTTP状态代码对了解在资源上操作时会发生什么很有用。无法找到资源吗?我如何知道是消费者犯了错误(4xx)而不是服务器(5xx)?这个资源(409)可能存在并发问题吗?我把状态代码列表当作一个指南,引发诸如此类的问题,并引导我的思想走向一个健壮的API。

6. Tell the World How to Stop Calling You

啊,缓存。你知道,当我阅读HTTP规范时,它让我大吃一惊,我意识到我们可以在客户端缓存,但让服务器告诉我们如何做。现在看来很明显,但这仍然很强大。在HTTP中工作自然会让我认识到我的资源有多可缓存,并让我专注于如何教消费者缓存它们。

你可以花很多时间来确定自己的习惯。您可以为诸如“我如何告诉我的调用者如何缓存”或“我如何告诉我的调用者他们犯了错误?”或者你可以屈服于老板的压力,“把事情做好”。但是如果你真的想要一个好的设计,看看RESTul web服务。如果这个范例符合您的需求,那么就让它来引导您的思维,让它为您的API提供健康的特性。解放你的思想,专注于真正重要的事情。RESTful web服务让您关注如何使您的API可用且简单。

原文发布于微信公众号 - 程序你好(codinghello)

原文发表时间:2018-09-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏代码世界

操作系统背景知识

 操作系统发展过程 1、手工操作方式 ——穿孔卡片(串行)   两个特点:   (1)用户独占全机。不会出现因资源已被其他用户占用而等待的现象,但资源的利用率低...

30390
来自专栏Java架构师学习

多研究些架构,少谈些框架——一名阿里架构师的笔记

微服务架构和SOA区别 微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为...

39480
来自专栏跨界架构师

分布式系统关注点——99%的人都能看懂的「熔断」以及最佳实践

那么在这样的背景下,如果某个服务A需要发布一个新版本,往往会对正在运行的其它依赖服务A的程序产生影响。甚至,一旦服务A的启动预热过程耗时过长,问题会更严重,大量...

10420
来自专栏成猿之路

Java的常用开发工具

java常用的开发工具。都说工欲善其事必先利其器,要想学好java这门语言,选择一款好用顺手的开发工具是必不可少的。另外面试java工作时开发工具的使用也是一个...

80220
来自专栏CSDN技术头条

《英雄联盟》支撑最高750万同时在线用户的聊天服务打造

【编者按】在2013年初马化腾被问及“过去两年腾讯在海外投资中最成功的案例是什么”时,他毫无疑问的回答:“投资美国的Riot Games,做出《英雄联盟》。”在...

292100
来自专栏编程

国外十大流行开源框架排名,第一名你绝对不知道?

PHP是WEB编程里面非常流行的语言,到现在为止,已经诞生了几十种PHP框架,以下为十个目前最流行的基于MVC设计模式的PHP框架。 1.Yii Yii是一个高...

44160
来自专栏原创

Android服务开发经验——优雅地活着 by个推推送

具体来说,就是要做到两点: 1. 尽可能运行 2. 尽可能省电 看似寻常的道理,实现起来还真不容易,下面一个个来看: 尽可能运行 Android系统会根据当前资...

40670
来自专栏Android机动车

Android模块化开发方案

随着业务的不断发展壮大,移动端所承担的功能也越来越重,特别是代码几易其主之后开始变得杂乱无章,牵一发而动全局的事情时常发生。为了应对团队壮大之后的开发模式,我们...

17720
来自专栏北京马哥教育

sqlserver、Mysql、Oracle三种数据库的优缺点总结

? 一、sqlserver 优点: 易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等; 为...

52360
来自专栏程序员互动联盟

我在苹果公司学到的编程技巧

当我还在苹果在线商店工作的时候,我们从来没有对在线网站做过负载测试。我们也不觉得需要这么做。然而,当每次史蒂夫·乔布斯在演示某个幻灯片过程中切换到在线商店时,会...

345120

扫码关注云+社区

领取腾讯云代金券