Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >为什么应该使用RESTful Web服务设计

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

作者头像
程序你好
发布于 2018-09-29 03:24:41
发布于 2018-09-29 03:24:41
1.5K0
举报
文章被收录于专栏:程序你好程序你好

你可能负责一个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可用且简单。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序你好 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
标准化API设计流程!
架构样式定义了应用程序编程接口(API)的不同组件如何相互交互。因此,它们通过提供设计和构建API的标准方法,确保了效率、可靠性和与其他系统的轻松集成。
Tinywan
2024/05/20
1850
标准化API设计流程!
2020-5-6-restful理解
Restful已经是目前我们耳熟能详的概念了,但是找了下网上的文章,大部分都是介绍restful API范式。很少介绍resetful架构的。今天同大家介绍下对restful的理解。此外,阮一峰的文章也很不错,感兴趣的同学也可以参考。理解RESTful架构 - 阮一峰的网络日志
黄腾霄
2020/06/10
4940
怎么做API设计
最近,一位同事问我关于“Beautiful API”的例子。我立刻半开玩笑地说:“情人眼里出西施。”当然,为了支持这一点,我很快地阐述了对我来说Beautiful API可能对别人来说并完美。这让我想
程序你好
2019/11/06
1.1K0
怎么做API设计
浅谈 RESTful API
全称:REST,全称是Resource Representational State Transfer,即:URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。
Spark学习技巧
2021/02/12
1K0
浅谈 RESTful API
RESTful杂记
在网上找了许久的关于REST的资料,发现网上大部分都是说的比较片面,虽然有部分说出了本质,但也没有详细提出,所以在这里记录一下。
菜的黑人牙膏
2019/01/21
6580
测试RESTful Web服务的工具-RESTClient
RESTful Web服务是一种基于HTTP协议的Web服务架构风格,它强调使用标准的HTTP方法(GET、POST、PUT、DELETE等)来实现资源的创建、读取、更新和删除,以及使用统一的资源标识符(URI)来唯一标识每个资源。通过RESTful Web服务,客户端可以与服务器进行交互,获取或修改服务器上的资源状态。这种架构风格具有轻量级、可扩展、易于维护和兼容性好等优点,因此在Web开发中得到了广泛的应用。
wangmcn
2024/03/22
5850
测试RESTful Web服务的工具-RESTClient
RESTful API 设计最佳实践
原文出处:RESTful API Design. Best Practices in a Nutshell. 原文:RESTful API Design. Best Practices in a Nutshell. 作者:Philipp Hauer 项目资源的URL应该如何设计?用名词复数还是用名词单数?一个资源需要多少个URL?用哪种HTTP方法来创建一个新的资源?可选参数应该放在哪里?哪些不涉及资源操作的URL呢?实现分页和版本控制的最好方法是什么?因为有太多的疑问,设计RES
崔庆才
2018/04/08
1.4K0
RESTful API 设计最佳实践
正确甄别API、REST API、RESTful API和Web Service之间的异同
看到API你会想起什么?是接口、第三方调用、还是API文档?初看你可能会觉得这太熟悉了,这不是系统开发日常系列吗?但你仔细想一想,你会发现API的概念在你脑海里是如此的模糊。如何你通过搜索引擎检索API,你会看到类似这样的信息:API——Application Programming Interface(应用程序编程接口),这太抽象了。接下来,我将结合在开发中总结的一些经验,以通俗的方式聊聊API、REST API、RESTful API以及Web Service这四者之间的联系与区别。
IT大咖说
2019/06/19
26.5K1
正确甄别API、REST API、RESTful API和Web Service之间的异同
【RESTful】RESTful API 接口设计规范 | 示例
参考官方文档:https://tools.ietf.org/html/rfc2616
前端修罗场
2023/10/07
1.8K0
【RESTful】RESTful API 接口设计规范 | 示例
深入解析 RESTful API:从设计到实践的完整指南
在当今的互联网世界中,不同系统之间的数据交互和通信是构建现代应用的核心需求。无论是移动应用、Web 平台,还是微服务架构,RESTful API 都扮演着桥梁的角色。它以其简洁性、灵活性和可扩展性,成为开发者构建分布式系统的首选方案。本文将从基础概念到实际应用,一步步拆解 RESTful API 的设计与实现,助你掌握这一关键技术。
DevKevin
2025/02/16
1910
RESTful API 最佳实践
在参考了GitHub API设计和大量博客文章后总结了一下RESTful API的设计,分享如下。想要更好的理解RESTful API首先需要理解如下概念:
哲洛不闹
2018/09/14
1.9K0
RESTful API 最佳实践
流行的几种API接口模式:RESTful、GraphQL、gRPC、WebSocket、Webhook
当思考使用哪种API接口时,你将会面临一个重要的决策。RESTful、GraphQL、gRPC、WebSocket和Webhook是当前流行的几种API接口模式。在本文中,我们将介绍这些接口的特点、用途和比较,帮助你选择最适合你应用程序需求的接口。
网络技术联盟站
2023/09/01
2.7K0
流行的几种API接口模式:RESTful、GraphQL、gRPC、WebSocket、Webhook
RESTful 架构以及 RESTful API开发
在周三的测试运维试听课程中,芒果给大家介绍了RESTful架构以及RESTful API开发-Django REST Framework,这里我们来做个小总结。
TestOps
2022/04/07
8780
RESTful 架构以及 RESTful API开发
分布式开发、基于Restful的WEB服务如何实现?
那么既然说到了分布式的开发,那么所有的开发者一定都会立刻联想到一个词:“慢”,对于传统的WEB服务开发(AXIS、XFire、CXF等),而且在编写的时候需要编写一大堆的客户端代码,这样对于整个程序的开发的复杂度还是非常高的,可是在实际的开发之中,如果你作为一个架构师,一定不可能将你一个项目的所有的子系统都设计为一个,中间一定会拆分成若干个子系统,于是这个若干个子系统之间如果要想进行数据的交互处理,只能够使用RPC。
爱明依
2019/03/12
5960
细说RESTful API之入门介绍
REST(英文:Representational State Transfer,又称具象状态传输)是Roy Thomas Fielding博士于2000年在他的博士论文中提出来的一种万维网软件架构风格,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息。目前在三种主流的Web服务实现方案中,因为REST模式与复杂的SOAP和XML-RPC相比更加简洁,越来越多的web服务开始采用REST风格设计和实现。
编程随笔
2019/09/11
6630
细说RESTful API之入门介绍
什么是 RESTful Web服务
总结就是: 上面的提到的特点,可以总结为“ 用明确的方法 操作 语义清晰的资源,来呈现不同的资源表现形式”。
张云飞Vir
2020/04/24
3K0
10个有关RESTful API良好设计的最佳实践
  Web API已经在最近几年变成重要的话题,一个干净的API设计对于后端系统是非常重要的。
物流IT圈
2019/07/16
6460
RESTful 架构基础
REST(Representational State Transfer)架构风格是一种世界观,把信息提升为架构中的一等公民。通过 REST 可以实现系统的高性能、可伸缩、通用性、简单性、可修改性和可扩展等特性。这篇文章解释了主要的 HTTP 操作,对 HTTP 响应码进行描述,并列举相关开发库和框架。此外,本文还提供了额外的资源,对每个主题进行了更深入的探讨。
芋道源码
2019/10/29
7910
RestFul架构基础
场景描述:REST(Representational State Transfer)架构风格是一种世界观,把信息提升为架构中的一等公民。通过 REST 可以实现系统的高性能、可伸缩、通用性、简单性、可修改性和可扩展等特性。这篇文章解释了主要的 HTTP 操作,对 HTTP 响应码进行描述,并列举相关开发库和框架。此外,本文还提供了额外的资源,对每个主题进行了更深入的探讨。
大数据真好玩
2019/10/30
6420
RestFul架构基础
使用ASP.NET Core 3.x 构建 RESTful API - 2. 什么是RESTful API
1. 使用ASP.NET Core 3.x 构建 RESTful API - 1.准备工作
solenovex
2019/11/12
6580
使用ASP.NET Core 3.x 构建 RESTful API - 2. 什么是RESTful API
相关推荐
标准化API设计流程!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文