但是,我主要接触的是REST,这是一种基于资源的API和Web服务开发架构风格。在我的职业生涯中有很大一部分时间都参与了构建、设计和使用API 的项目。...因此我决定写篇文章分享一下,在设计 REST API 时的最佳实践。以下是关于设计优秀REST API 的一些建议、提示和指导,帮助您让消费者(以及开发人员)满意。 1....不要在 URI 中使用动词 到目前为止,如果您已经理解了基本概念,那么您会开始意识到在URI中放置动词是不符合RESTful的,这是因为HTTP动词应该足以准确描述正在对资源执行的操作。...我个人建议使用查询字符串参数直接过滤books资源: GET: /books?author=Cagan 这显然意味着:“获取所有名为Cagan 的作者所写的书”,对吧。 9....通过过滤,消费者可以指定返回项目应具有哪些参数(或属性)。分页允许用户逐步获取数据集。最简单类型的分页就是按页码进行分页,它由page和page size确定。
获取同栈的用户列表(未有关注之猿时获取) 发布问题 发布分享 关注某条内容 取消关注内容 获取内容的评论列表 添加评论 回复评论 点赞评论 关注某用户 取消关注某用户 获取某人详细资料 获取某人的发布内容...获取某人关注的人 获取某人的粉丝列表 获取我的消息 提交意见反馈 退出登录 需求确定,接着就可以开始设计API了。...REST API 关于什么是REST,我就不在这里赘述了,直接推荐REST作者的经典论文: 架构风格与基于网络的软件架构设计(中文修订版) 下面我只想用一些实例描述几种架构风格在API定义方面的不同。...其实,使用REST风格设计API,我觉得难点就在于如何抽象资源。使用RPC则相对容易很多。这时,也许有人就会提出疑问了。既然使用RPC比用REST更容易抽象出接口,那为何还要用REST呢?...API定义 本项目的API是打算使用REST方式定义的。那么,首先,就是资源的Endpoint定义。
不同平台,开发语言之间通过SOAP来交互的web service都能够较好的互通(在部分复杂和特殊的参数和返回对象解析上,协议没有作很细致的规定,导致还是需要作部分修正) REST国外很多大网站都发布了自己的开发...API,很多都提供了SOAP和REST两种Web Service,根据调查部分网站的REST风格的使用情况要高于SOAP。...例如对于friends的获取,就定义为friends.get,前面部分作为资源定义,后面是具体的操作,其他的API也是类似,资源+操作,因此就算使用http的get方法都可能作了update的操作,其实已经违背了...总结 看了上面那么多网站的设计,总结一下主要有这么几种设计方式。 请求消息设计 基本符合REST标准方式:资源URI定义(资源.操作)+参数。...这类设计如果滥用get去处理其他类型的操作,那么和2无异。 REST风格非REST思想:资源URI定义+参数(包含操作方法名)。其实就是RPC的REST跟风。
服务端存根(stub)和客户端存根(stub)负责参数的序列化和反序列化。 ? RPC的优点 直接简单的交互方式:RPC使用GET获取信息,并使用POST处理其他功能。...方便添加功能:如果我们对API有新的需求,可以通过简单地添加新的后端来满足该需求:1)编写一个新的功能,然后发布;2)然后客户端就可以通过这个后端来满足需求。...因此Slack API的设计者可以使用RPC风格的模型,使功能更简单、紧凑,也更方便使用。...gRPC背后使用的是HTTP 2,因此能够优化网络层,每天可以在不同的服务间传送大量消息。但如果不关心高性能网络,转而期望团队间能够使用稳定的API来发布不同的微服务,那么可以选择使用REST。...如何选择API模式 每种API项目都有不同的要求,通常基于如下几点进行选择: 使用的编程语言 开发环境,以及 涉及的人力和财务资源等 在了解到每种API设计风格之后,API设计者就可以根据项目的需要选择最合适的
要使用 REST API 实现相同的功能,我们需要引入难以管理和扩展的非结构化参数和条件。...REST API 通常是端点的集合,其中每个端点代表一个资源。因此,当客户端需要获取多个资源的数据时,需要对 REST API 进行多次往返,以将其所需的数据放在一起。...例如,READ REST API 端点可能是 GET /ResouceName - 从该资源获取所有记录的列表; GET /ResourceName/ResourceID - 获取该 ID 标识的单条记录...它们当然不是 REST API 的所有问题,我也不想讨论 REST API 是什么。我主要讨论的是比较流行的基于资源的 HTTP 端点 API。...但是,如果我们想将这些层放置于 GraphQL 之后,我们可以使用 GraphQL 来传递客户端和强逻辑之间的访问令牌。这与我们通过 RESTful API 进行认证和授权的方式非常相似。
在开发实践中我们很多人可能还是使用传统API进行请求交互,很多人其实并不特别了解RESTful API,对RESTful API的认知可能会停留在: 面向资源类型的 是一种风格 (误区)接口传递参数使用斜杠...}/{resources}/{resource_id} version:API版本号,有些版本号放置在头信息中也可以,通过控制版本号有利于应用迭代。...不要使用文件扩展名 HTTP动词 在RESTful API中,不同的HTTP请求方法有各自的含义,这里就展示GET,POST,PUT,DELETE几种请求API的设计与含义分析。...无论进行多少次操作,结果都是一样的。 并且GET请求会把请求的参数附加在URL后面,但是不同的浏览器对其有不同的大小长度限制。 在本案例中,我们设计两个GET请求的API。...所以,当你或你们的技术团队在设计API的时候,如果使用场景和REST风格很匹配,那么你们可以采用RESTful 风格API。
因此,在实际的程序中,我们最终会为这些资源提供大量端点。如果要发出 GET 请求,则需要具有特定参数并特定于该请求的端点。如果要发出 POST 请求,则需要该请求的另一个端点。 ?...过度获取和欠缺的信息 真正令人烦恼的问题是通过 REST API 会过度获取和欠缺的信息。这是因为 REST API 会始终返回固定的结构。...如果我们想从两个不同的资源获取数据,就需要分别对两个不同的端点进行调用。在一个巨大的程序中,扩展性会很差,因为在某些情况下我们只需要获取特定的数据,而不是整个对象。...如上所述,这些问题是: 表现不佳 端点过多 过度获取或欠缺数据 每当我们要增加或删除某些内容时,需要开发另一个版本 API 难以理解 考虑到许多概念,Facebook 的开发人员开使用了一种更好的方法来设计...它改善了你的开发周期,因为你不必向两个不同的资源发出请求来获取数据。此外,当我们开发一个大型的应用时,不必再像 REST 一样获得大量端点和代码。
为了快速、大规模地集成不同的应用程序,API 使用协议或规范来定义那些通过网络传输的消息的语义和信息。这些规范构成了 API 的体系结构。 在过去,人们已经发布了多种不同的 API 架构风格。...客户端和服务端各自负责参数的序列化和反序列化。 (远程过程调用的机制,图源:Guru99) 2 RPC 的优势 简单直接的交互。RPC 使用 GET 来获取信息,使用 POST 来处理其他所有操作。...用于内部微服务的客户特定的 API。由于是在单个提供者和单个使用者之间建立直接的集成,我们不想像 REST API 那样,花太多时间通过网络传输大量的元数据。...3 REST 的不足 没有标准的 REST 结构:在构建 REST API 方面,没有具体的正确方法。如何对资源进行建模以及哪些资源需要建模取决于不同的情况。...每个 API 项目都有不同的限制和需求。通常,API 架构的选择取决于: 所使用的编程语言,你的开发环境,以及你的资源预算,包括人力资源和财务资源。
微服务通过对复杂应用的拆分,达到简化应用的目的,而这些耦合度较低的服务则通过 API 形式进行通信,所以服务之间对外暴露的都是 API,不管是对资源的获取还是修改。...API Gateway 根据不同的 API 判定来自于哪个客户端,然后分别进行处理,返回不同客户端所需的资源。 ? 3....我们可以通过下面的例子进行理解。 按照 REST 的设计标准来看,所有的访问都是基于对资源的访问(增删查改)。...相比于 REST 风格,GraphQL 具有如下特性: 1. 定义数据模型:按需获取 GraphQL 在服务器实现端,需要定义不同的数据模型。...GraphQL 与 REST 对于 GraphQL 和 REST 之间的对比,主要有如下不同: 1. 数据获取:REST 缺乏可扩展性, GraphQL 能够按需获取。
为了快速、大规模地集成不同的应用程序,API 使用协议或规范来定义那些通过网络传输的消息的语义和信息。这些规范构成了 API 的体系结构。 在过去,人们已经发布了多种不同的 API 架构风格。...客户端和服务端各自负责参数的序列化和反序列化。 ? 远程过程调用的机制,图源:Guru99 RPC 的优势 简单直接的交互。RPC 使用 GET 来获取信息,使用 POST 来处理其他所有操作。...用于内部微服务的客户特定的 API。由于是在单个提供者和单个使用者之间建立直接的集成,我们不想像 REST API 那样,花太多时间通过网络传输大量的元数据。...REST 的不足 没有标准的 REST 结构:在构建 REST API 方面,没有具体的正确方法。如何对资源进行建模以及哪些资源需要建模取决于不同的情况。...每个 API 项目都有不同的限制和需求。通常,API 架构的选择取决于: 所使用的编程语言, 你的开发环境,以及 你的资源预算,包括人力资源和财务资源。
他是一种规范或者设计风格而不是特别的技术。REST形式的API组织形态是资源和实体,请求的路由可以看出对资源的访问,规范统一接口自解释。...GET用来获取资源,POST用来新建资源,PUT用来更新指定资源,PATCH用来批量更新资源,DELETE用来删除资源,通过谓词来表示请求动作或者意图,通过url定位资源。...如果我们严格的按照Rest风格设计接口的话,需要对技术人员有很高的要求,需要去划分不同业务不同的资源定位,而且有些业务也找不到准确的谓词去定义,响应状态码有限无法表达准确的意思,或者是时间上来不及等等原因...而且这种方式更符合国外语言表达的方式,不太适合我国宝宝体质。 所以我们在设计接口的时候不用非要用Rest风格,我们可以靠近或者在特定的更适合使用Rest接口系统中使用。...; } } 当然也可以使用[FromRoute]从route获取,另外我们还有一些Attribute用于从不同的地方获取参数,比如从QueryString获取。
在Web应用程开发中,API是我们通过网络进行数据检索的一种主要方式,API文档将告知你检索数据的URL列表、查询参数、请求方式以及响应状态,其目的是降低Web应用程序开发难度,共享两个应用程序之间的数据...接下来,通过一个简单的例子以加深对REST API和RESTful API的理解。下面将给出一个执行CURD操作的RESTful API设计案例: ?...学生管理API的使用者调用的API如下: 1、创建学生资源:[POST] http://www.example.com/student 2、获取所有学生资源:[GET] http://www.example.com...,API的使用者(客户端)关注的是资源(读懂数据),并不需要了解API内部构造;API的提供者(服务端)只关注自己的内部实现,而不关系API使用者(客户端)的状态。...因为在RESTful API的设计中,我们完全可以通过GET的方式完成CURD操作,也可以通过DELETE行为来创建资源,通过POST行为来修改资源,它的实现方式并不严谨或者说并没有严格按照REST API
通常,它们由统一资源标识符 (URI) 描述。此外,内部实现与资源表示是分开的。此外,表示应提供修改或删除资源或获取附加数据的所有信息。 客户端-服务器体系结构。客户端使用 URI 获取资源。...另一方面,服务器处理并返回资源。它不会以任何方式影响用户界面。客户端和服务器都不需要了解其他职责。因此,它们可以独立进化。它允许在许多不同的客户端中使用单个API,例如Web浏览器,移动应用程序。...HTTP 方法描述客户端要对资源执行的操作。有四种最常用的基本方法:获取、发布、放置和删除。让我们定义它们。 第一个,GET用于读取资源。服务器返回给定 URI 的资源。GET 方法不包含正文。...虽然,它有很大的不同。它用于更新现有资源。它用传输的数据覆盖整个资源。PUT与POST不同的主要属性是PUT是一个幂等操作。这意味着多次使用相同的数据调用 PUT 将始终给出相同的结果。...在用户响应中,我们嵌入了一个地址 URI,通过使用它,客户端可以获取地址详细信息。
为了快速、大规模地集成应用程序,API 使用协议和/或规范来实现,以定义通过网络传递的消息的语义和语法。这些规范构成了 API 架构。 随着时间的推移,各种不同的 API 架构风格应运而生。...RPC使用 GET 方式获取信息,其余操作则使用 POST 方式。服务器和客户端之间的交互机制归结为调用端点并获取响应。 易于添加功能。...因此,Slack API 的设计者以类似 RPC 的风格对其进行了建模,使其精简、紧凑且易于使用。 面向内部微服务的客户专属 API。...但是,如果您的目标并非高网络性能,而是在发布高度差异化的微服务的团队之间建立稳定的 API 连接,那么 REST 能够满足您的需求。...通常,架构选择取决于 正在使用的编程语言, 你的开发环境,以及 您所能节省的资源,包括人力和财力。 了解每种设计风格的所有权衡后,API 设计人员可以选择最适合项目的设计风格。
请求头 发送到服务器的额外请求以指定响应类型、编码、内容类型和自定义参数。等等。 4. 请求体 尝试创建资源时,资源数据在放置请求的正文中发送。 5. 响应体 Web 服务器在响应正文中返回数据。...创建 Python REST Web 服务 让我们使用 python 中的烧瓶创建一个简单的 REST Web 服务,我们可以使用 Postman 工具或 Curl 命令行实用程序来使用这个 Web 服务...我们在此服务中的资源将是文章,它将存储在 TGS 上发布的所有文章,格式如下 类别 观看次数 标题 我们将公开 REST 端点以添加、修改、删除和更新文章。基于 REST 的 CRUD 功能。...创建资源文章 接下来,创建资源文章,这将是一个简单的文章列表,我们也可以使用数据库来存储资源。...def delete(self,category): 4.注册资源并分配URI 我们的最后一步是将我们的资源注册到 REST API 并为其分配一个 URI。
REST API原理与API通信要理解GET和POST的作用,首先需要理解REST API的原理及其如何操作。REST(表现层状态转移)是一种设计风格,用于通过HTTP方法管理和操作资源。...因此,选择使用哪种操作和相应的HTTP方法通常是特定于REST API的。API通信如何工作REST定义了一种API设计的方法,涉及客户端与服务器之间的交互。...在理解了REST API的基础之后,让我们来定义GET和POST:GETGET是一种HTTP方法,用于从指定的服务器请求数据。通过使用GET方法,客户端可以基于请求中发送的参数检索信息。...让我们通过以下各方面的比较,详细分析这些区别:属性GETPOST目的获取资源创建、更新或删除资源数据存储方式存储在查询字符串中存储在请求体中URL长度限制有限制没有限制浏览器历史记录记录在URL中不记录缓存可缓存不可缓存安全性安全性较差安全性较好书签可以添加书签无法添加书签使用场景...安全性的区别GET:请求参数包含在URL中,相对不安全。POST:数据通过请求体传输,通常被认为更安全。使用场景的区别GET:常用于数据获取。POST:常用于数据提交或处理请求。
例如,对于在移动应用程序中使用的实际 api,原子资源的使用是次优的。再如,完全拒绝请求之间的数据存储实质上禁止了随处可见的“用户会话”机制。 不过,我想说,也没你想的那么糟糕!...因为你通过高质量的 API 规范实现的 api 将会是一致的,具有清晰的结构、良好的文档和高的单元测试覆盖率。 通常,REST API规范与其文档相关联。...所有资源的描述,包括标识符、HTTP 方法、所有输入参数、响应代码和主体数据类型,以及指向定义的链接。 所有可用于输入或输出的定义,以 JSON 模式格式。...tinyspec 定义的 API 是由具有直观语法的小文件组成,这些文件描述了项目中使用的数据模型。同时,这些文件就放置在代码文件旁边,能够在编写代码的时候提供快速的参考。...3.模型序列化 几乎所有现代服务器框架都以这样或那样的方式使用对象关系映射(ORM)。这意味着 API 使用的大部分资源是由模型及其实例和集合表示的。
任何遵循 REST 设计原则的 API 都被称为 RESTful API。 简单地说,REST API 是两台计算机通过 HTTP(超文本传输协议)进行通信的媒介,与客户端和服务器的通信方式相同。...1.REST API 设计建议 1.用名词表示资源 当你设计一个 REST API 时,你不应该在端点路径中使用动词。端点应该使用名词,表示它们各自的作用。...需要注意的是 POST 和 PUT 最大的区别就是幂等性,所以 PUT 也可以用于创建操作,只要在创建前就可以确定资源的 ID。 获取:使用 GET 方法获取资源。GET 请求从不改变资源的状态。...11.URL Query 使用下划线分隔单词 查询字符串是 URL 的组成部分。URL 规范规定查询字符串的不同参数使用与号(&)分隔,参数名与值使用等号(=)分隔。...你也可以使用 Postman 来记录你的 API,这是软件开发中最常见的 API 测试工具。 17.使用 SSL 保障安全 SSL 指的是安全套接层。这对于 REST API 设计的安全性至关重要。
REST(Representational state transfer,表述性状态转移) 是一种 API 设计架构,用于通过使用一组预定义的无状态操作(包括 GET、POST、PUT 和 DELETE...REST 的核心思想是,通过向资源的 URL 发送请求并获得响应(通常是 JSON,但这取决于 API)来检索资源。...灵活性 是使用 REST 的另一个优势,因为可以将其设计成处理不同类型的调用并返回不同的数据格式。 REST 的劣势 抓取过度——这是指 API 端点提供的信息比客户端所需要的要多得多。...GraphQL 是一种 API 设计架构,它采用了不同的方法,在这种方法中,所有的东西都被视为一个表示其连接的图。.../user//posts 获取该用户发布的帖子列表。 /user//followers 以获取该用户的关注者列表。 但是在所有这些情况下,我们都过度抓取数据了。
实现 Auth 认证 使用 Laravel 的 API 资源功能来构建你的 API 单个 Laravel 项目同时配置不同域名 api.domain(用户端接口) 和 admin.domain(管理员端...) 多字段登录通用解决方案 Laravel 做 API 服务端,VueJS+iView 做 SPA,给新手一个 Demo 在 Laravel 中使用 GraphQL 一【获取数据】 Laravel 开发...API 的设计规范 实战经验的总结,具有较强的启发意义 撰写安全合格的REST API 利用好 HTTP 协议所具备的特征 Web 服务编程,REST 与 SOAP REST 与传统的面向服务的接口设计的区别...OpenNMS Wiki ReST API REST API 使用详解 Lean Cloud 中讲解 REST API 的使用,还集成 Swagger UI 在线调试工具,点击查看。...—— 微信登录、JWT的使用; 用户信息 —— 获取个人信息、上传图片接口、修改个人信息; 话题接口 —— 发布、修改、删除、列表; 话题回复接口 —— 发布、修改、删除、列表; 权限控制 —— 权限列表