REST API 关于什么是REST,我就不在这里赘述了,直接推荐REST作者的经典论文: 架构风格与基于网络的软件架构设计(中文修订版) 下面我只想用一些实例描述几种架构风格在API定义方面的不同。...其实,使用REST风格设计API,我觉得难点就在于如何抽象资源。使用RPC则相对容易很多。这时,也许有人就会提出疑问了。既然使用RPC比用REST更容易抽象出接口,那为何还要用REST呢?...API定义 本项目的API是打算使用REST方式定义的。那么,首先,就是资源的Endpoint定义。...API安全设计 安全设计方面,首先,我打算全面使用HTTPS。使用HTTPS,虽然牺牲了性能,但可以解决大部分安全问题。...URL签名在每次发送请求时都需要附加在参数中,服务端接收到请求后会使用同样的签名算法计算签名值,只有服务端计算出来的签名值和接收到的签名值一致时才认为请求是安全的。
Elasticsearch也是使用Java编写并使用Lucene来建立索引并实现搜索功能,但是它的目的是通过简单连贯的RESTful API让全文搜索变得简单并隐藏Lucene的复杂性。...范围查询(Range Query) 范围查询使我们能够找到在某一字段值在某个范围里的文档,字段可以是数值型,也可以是基于字符串的。范围查询只能针对单个字段。...方法: (1)gte() :范围查询将匹配字段值大于或等于此参数值的文档。 (2)gt() :范围查询将匹配字段值大于此参数值的文档。...(3)lte() :范围查询将匹配字段值小于或等于此参数值的文档。 (4)lt() :范围查询将匹配字段值小于此参数值的文档。...includeLower(true) 表示 from() 查询将匹配字段值大于或等于此参数值的文档; includeLower(false) 表示 from() 查询将匹配字段值大于此参数值的文档; includeUpper
主体输入 考虑到接口的扩展性,所有API的输入只能接受一般的 JSON 对象作为输入参数,同时也只能输出一个 JSON 对象。 当输入输出的值是单一值、数组时,需要使用一个对象对其进行封装。...API操作设计 每个具体的 API地址,都是一个操作。操作分为两种类型:资源型操作、业务型操作。 2.3.1. 资源型操作 资源型操作是满足REST规范化设计的。在设计API 时,应尽量首选这种模式。...动作:使用 GET 来进行请求。 · 其它查询 每一个特殊查询,都需要提供相应的特殊查询地址。必须参数以URI Part 的形式给出,可选参数则以查询字符串的形式给出。...例如,使用以下格式: /users/username/hqf/minAge/30/?optionalParam1=1 如果两个 API 使用了相同的参数,则需要在资源后追加一个查询的名称,用以区分。...· 查询资源的合集 有时,查询不是直接针对某个单一的资源,而是联合查询一系列资源的合集,返回值的格式也与单一资源格式不同。这时,需要为这个资源合集声明一个新的资源地址。
分类列表、标签列表实现比较简单,我们这里给出接口的设计规范,大家可以使用前几篇教程中学到的知识点轻松实现(具体实现可参考 GtiHub 上的源代码)。...对于这样的场景,我们可以在请求 API 时加上查询参数,django-rest-framework 解析查询参数,然后从全部文章列表中过滤出查询所指定的文章列表再返回。...这在 RESTful API 的设计中肯定是会遇到的,因此第三方库 django-filter 帮我们实现了上述所说的查询过滤功能,而且和 django-rest-framework 有很好的集成,我们可以在...归档日期下的文章列表,我们设计的接口传递 2 个查询参数:年份和月份。...点击会弹出过滤参数输入的交互面板,在这里可以交互式地输入查询过滤参数的值。 例如选择如下的过滤参数,得到查询的 URL 为: http://127.0.0.1:10000/api/posts/?
; 之所以会产生这样的接口维护成本,一个原因在于这里API接口的设计承担了数据表示的职责:为前端的UI/UX提供展现所需要的数据。...GraphQL 专注于数据建模 2012年Facebook移动端从H5改用IOS原生应用重新开发时遇到了类似的问题,新的APP产品设计使得原来的很多REST API不再适用或者使用过滤繁琐。...类似的,你可以在Space Cloud的管理界面上声明你的REST API的接口信息(请求路径,参数,响应格式等)。...比如你有两个微服务的HTTP接口: /add接口:接收两个参数,返回两个数的和; /double接口:接收一个参数,返回其乘以2的值; 在完成接口的声明后,你就自动的获得了通过GraphQL访问接口能力...再比如以下的查询,客户端可以在一次请求中,完成对某个数据的查询操作并对其返回结果中的某个字段调用另一个微服务接口(/double)进行加工处理。 ?
(HATEOAS) RESTful使用应该注意的问题 版本(Versioning) 参数命名规范 url命名规范 统一返回数据格式 http状态码 合理使用query parameter 多表、多参数连接查询如何设计...如果某个服务违反了其他任意一项准则,严格意思上不能称之为RESTful风格。 3.RESTful使用应该注意的问题 1....合理使用query parameter 在请求数据时,客户端经常会对数据进行过滤和分页等要求,而这些参数推荐采用HTTP Query Parameter的方式实现 比如设计一个最近登陆的所有用户 https...多表、多参数连接查询如何设计URL 这是一个比较头痛的问题,在做单个实体的查询比较容易和规范操作,但是在实际的API并不是这么简单而已,这其中常常会设计到多表连接、多条件筛选、排序等。...比如我想查询一个获取在6月份的订单中大于500元的且用户地址是北京,用户年龄在22岁到40岁、购买金额降序排列的订单列表 https://example.com/api/orders?
比如服务端可以返回一些 Javascript 代码让客户端执行,去实现某些特定的功能。提示:REST架构中的设计准则中,只有按需编码为可选项。...合理使用query parameter 在请求数据时,客户端经常会对数据进行过滤和分页等要求,而这些参数推荐采用HTTP Query Parameter的方式实现 比如设计一个最近登陆的所有用户 https...多表、多参数连接查询如何设计URL 这是一个比较头痛的问题,在做单个实体的查询比较容易和规范操作,但是在实际的API并不是这么简单而已,这其中常常会设计到多表连接、多条件筛选、排序等。...比如我想查询一个获取在6月份的订单中大于500元的且用户地址是北京,用户年龄在22岁到40岁、购买金额降序排列的订单列表 https://example.com/api/orders?...减少了查询参数、API的可读性和可维护行增强了。 https://example.com/api/orders/beijing/6?
最近几年REST API越来越流行,特别是随着微服务的概念被广泛接受和应用,很多Web Service都使用了REST API。...这些系统按照自己的理解,采用了类似REST API的部分形式(如用GET/POST/PUT/DELETE进行CURD),但更多的是随意设计,搞出了REST-RPC式,甚至是RPC式的API。...这样的API,不仅没体现出REST API的优势,反而搞成“四不像”,增加了开发维护成本。 如何理解REST 要规范使用RESTful架构,首先要理解什么是REST。...因为REST需要通过URI来唯一定位某个(或某种)资源,所以查询资源时,各种资源ID一般是放在URI里面,而不是放在请求参数里面。...但是否使用了GET/POST/PUT/DELETE,并不能作为评判一个系统是否符合REST架构风格的标准。
前面我们介绍了一些REST API的基本约定,包括多个索引以及索引名称中的Date Math支持,本文我们来继续上文的话题,主要来看看公共参数和URL访问控制。...Parameters REST参数(使用HTTP时,映射到HTTP URL参数)遵循使用下划线的约定。...用来实现模糊查询,这里的模糊查询被定义为Levenshtein Edit Distance,指将一个字符串变为另外一个字符串所需要操作的步数,默认值为AUTO,AUTO策略如下: 字符长度在0~2之间,...必须全部匹配 字符长度在3~5之间,允许编辑一次 字符长度大于5,允许编辑两次 例如,我的test1索引中,有一个文档的name属性值为sang,我可以使用如下方式查询: curl -X GET "localhost...批量和多搜索API支持NDJSON,JSON和SMILE,其他类型将导致错误响应。 此外,在使用source查询字符串参数时,必须使用sourcecontenttype查询字符串参数指定内容类型。
序 本文主要研究下rest api的设计。 设计准则 easy to use & hard to misuse 易用不易误用,也就是api设计不要太复杂,要简单易用,而且还不能容易用错。...,用-表示降序 字段过滤比如fields=field1,field2,field3 复杂查询简单的比如用eq代表等,lt代表小于,lte代表小于等于,gt代表大于,gte代表大于等于,like代表模糊查询...appId及appKey,用于最基本的调用源的鉴权 细粒度鉴权对于更细粒度的数据权限控制,要细化到url及requestMethod基本 参数校验对于查询、修改等参数要做基本校验,对参数内容进行非法参数过滤...服务质量保障 提供SLA 提供流量管理、熔断、限流 提供服务扩容机制 提供故障演练 提供审计功能 监控异常流量 提供调用方间的隔离 小结 rest api的设计牵扯的方面比较多,本文暂时只是先列了一些...doc API设计要点 聊聊jpa的动态查询 使用RSQL实现端到端的动态查询
数据模型和服务 我们假设一个简单的场景,为了给用户提供凑单功能,我们在后端写一个服务用于查询低于某个价格的产品(Product),并将满足条件的产品列表返回给客户端。...服务中,我们使用了 Jmix 的 DataManager 和 JPQL 查询语句加载实体,并使用方法的输入参数作为 JPQL 的参数。...而使用 DataManager 的一个好处是可以利用 Jmix 的安全机制,控制 API 调用方对实体的访问权限。...例如,通过 Postman 调用: ▲Postman 调用服务 API 服务 API 会默认使用 Jmix 的安全机制:API 端口需要使用认证 token 进行访问,而且用户需要有访问 REST API...注意,这里的 URL 与服务 URL 不同,直接使用了控制器中定义的路径: ▲Postman 调用控制器 API 结论 通过上面的代码,我们可以看到,在 Jmix 中使用两种类型的 REST API
作者:Philipp Hauer 项目资源的URL应该如何设计?用名词复数还是用名词单数?一个资源需要多少个URL?用哪种HTTP方法来创建一个新的资源?可选参数应该放在哪里?...每个资源使用两个URL 资源集合用一个URL,具体某个资源用一个URL: /employees #资源集合的URL /employees/56 #具体某个资源的URL 用名词代替动词表示资源...但最重要的是:避免复数和单数名词混合使用,这显得非常混乱且容易出错。 对可选的、复杂的参数,使用查询字符串(?)...为资源设置一个基本URL,将可选的、复杂的参数用查询字符串表示。 GET /employees?...在响应参数中添加浏览其它API的链接 理想情况下,不会让客户端自己构造使用REST API的URL。让我们思考一个例子。 客户端想要访问员工的薪酬表。
前面一篇我们介绍了 Office 365 REST API 的官方工具的使用,本篇我们来看一下 SharePoint REST API 本身的描述、结构和使用方法,以及一些使用经验。...上面我们介绍了列表,文件夹等类型 API 的地址构造,接下来我们看看这些请求地址中允许的查询参数都有哪些: (1)$select 参数 如 SQL 中 Select...下面这张表,涵盖了 SharePoint REST API 中几乎所有的查询条件和数字、字符等的比较关键字。...这是针对字符串的比较操作,而针对数字的则包括 lt(小于)、le(小于等于)、gt(大于)、ge(大于等于)、eq(等于)和 ne(不等于)。...这样我们就把 SharePoint REST API 的构成和基本的使用方法介绍完了,希望对大家在 Windows 商店应用中使用 SharePoint REST API 有所帮助,谢谢。
但是,我主要接触的是REST,这是一种基于资源的API和Web服务开发架构风格。在我的职业生涯中有很大一部分时间都参与了构建、设计和使用API 的项目。...学习 HTTP 基础知识 如果你想构建一个设计良好的REST API,那么你必须了解HTTP协议的基本知识。我坚信这将帮助你做出正确的设计选择。...我个人建议使用查询字符串参数直接过滤books资源: GET: /books?author=Cagan 这显然意味着:“获取所有名为Cagan 的作者所写的书”,对吧。 9....现在问题来了:如何将这样的功能融入REST API? 我的答案是:使用查询字符串(querystring)。 我认为使用查询字符串实现分页非常明显。它看起来像这样: GET: /books?...使用专门针对REST API的网络框架 作为最后一个最佳实践,让我们讨论这个问题:如何在您的API中实际应用最佳实践?大多数时候,您希望建立一个快速的API,以便一些服务可以相互交互。
1.REST API 设计建议 1.用名词表示资源 当你设计一个 REST API 时,你不应该在端点路径中使用动词。端点应该使用名词,表示它们各自的作用。...11.URL Query 使用下划线分隔单词 查询字符串是 URL 的组成部分。URL 规范规定查询字符串的不同参数使用与号(&)分隔,参数名与值使用等号(=)分隔。...当我们在 URL Query 中命名参数名称与值时,建议使用下划线。 如一个使用下划线的查询参数可能如下所示: https://api.example.com/users?...first_name=john&last_name=doe 而使用连字符的查询参数则可能如下所示: https://api.example.com/users?...first-name=john&last-name=doe 虽然在技术上两者都是有效的,但使用下划线的查询参数更符合 REST API 的最佳实践,并且更容易读写和阅读。
项目资源的URL应该如何设计?用名词复数还是用名词单数?一个资源需要多少个URL?用哪种HTTP方法来创建一个新的资源?可选参数应该放在哪里?那些不涉及资源操作的URL呢?...实现分页和版本控制的最好方法是什么?因为有太多的疑问,设计RESTful API变得很棘手。在这篇文章中,我们来看一下RESTful API设计,并给出一个最佳实践方案。...但最重要的是:避免复数和单数名词混合使用,这显得非常混乱且容易出错。 对可选的、复杂的参数,使用查询字符串(?)。...为资源设置一个基本URL,将可选的、复杂的参数用查询字符串表示。 GET /employees?...在响应参数中添加浏览其它API的链接 理想情况下,不会让客户端自己构造使用REST API的URL。让我们思考一个例子。 客户端想要访问员工的薪酬表。
HTTP动词 ---- http的动词有好几个,不过我们只要关注四个即可: GET:获取或者查询数据使用,保持幂等; DELETE:删除数据使用,保持幂等; POST:使用场景通常有两个: 一是增加数据的时候...,本身是不幂等的,但是可以通过一些手段来保证重复执行不会产生副作用; 二是做复杂查询时,应该使用POST,而不是用GET。...如果在输入参数里,这样定义会变成一个对象。...设计指南:http://www.ruanyifeng.com/blog/2014/05/restful_api.html 微软Restful API设计指引:https://github.com/Microsoft.../api-guidelines/blob/master/Guidelines.md Github Restful API:https://docs.github.com/en/rest/guides/getting-started-with-the-rest-api
修改IP地址后,第一次使用halcon采集助手Image acquisition,会提示: ? 如果点击否,则无法连接到相机,提示错误:采集图像:设备不能被初始化。 ?...如果点击是,相机能成功采集,且open_framegrabber算子里面多了一个参数:force ip=192.168.~ 其中第一个IP地址为主机网口地址,第二个IP地址为相机网口地址。
第 1 章 REST 简介 1.1 API 与 REST API 是一个系统向外暴露或公开的一套接口,通过这些接口,外部应用程序能够访问该系统 REST 是一种基于资源的架构风格,任何能够命名的对象都是一个资源...方法、HTTP 消息头和 HTTP 状态码 除了原则以外,在设计资源的 URI 时也应该注意以下原则: 使用名词的复数表示一个资源集合 使用斜线 ”/“ 用来表示资源之间的层次关系 对资源的增删改查等操作名称不应该包含在...URL 中 如果一个操作无法对应到资源的某个操作上,此时可以适当地在 URI 中包含动词,但仍然应该基于一个资源的标识符 查询字符串可以用来对资源进行筛选、搜索或分页查询 URI 应使用小写字母 URI...在 RESTful API 中,JSON 和 XML 是最常用到的两种资源表述格式 JSON 是一种轻量级的数据交换格式,数据使用名称/值来表示,中间用冒号隔开 JSON 数据项的值的类型可以是下列类型...更简洁,容易解析,但是不支持注释,扩展性不如 XML RESTful API 添加版本有以下4中方式: 使用 URI 路径,如 api/v1/users 使用查询字符串,如 api/users?
'uploads': '20/day' } } 排序 排序就是在对api进行请求的时候加上ordering参数,就可以在请求的返回结果中对某一个字段进行排序。...ordering=title 过滤器 所谓过滤其实就是在API请求的时候加上一些参数,限制返回的结果,比如只查询id为1的书本信息,或者查询id大于2小于5的书本信息。...name=袁隆平 虽然这种方法很简单就能实现过滤的功能,但是也如上面的两个例子展示的那样,只能实现很简单的过滤,在过滤的时候必须明确地指定需要过滤的参数和对应的值,没办法搜索一个范围,比如我想搜索id...大于2小于5之间所有的英雄就只能一次查询id=3,id=4,不能一次性查询。...查询id大于10的书: GET /books/bookinfos/?id__gte=10 查询出版年份早于1986年的书: GET /books/bookinfos/?
领取专属 10元无门槛券
手把手带您无忧上云