首页
学习
活动
专区
圈层
工具
发布

REST API 设计最佳实践:如何构建、设计和使用 API ?

因此我决定写篇文章分享一下,在设计 REST API 时的最佳实践。以下是关于设计优秀REST API 的一些建议、提示和指导,帮助您让消费者(以及开发人员)满意。 1....我所使用的端点看起来像这样: POST: /buckets 当时我非常生气,怎么也想不明白究竟哪里出了问题。最后,原来是因为缺少了尾随斜杠导致服务器出错!...您的用户可能希望检索满足特定条件的项目,或者一次只检索少量数据以提高性能,这正是过滤和分页功能所设计的目标。 通过过滤,消费者可以指定返回项目应具有哪些参数(或属性)。分页允许用户逐步获取数据集。...首先,你可能会想做类似以下操作以仅检索已发布书籍列表: GET: /books/published/ 设计问题:published 不是资源!相反,它是您要检索数据所具备特征。...在Node中,Restify似乎也是一个很好的选择,尽管我还没有尝试过。我强烈建议您试一试这些框架,它们将帮助您构建美观、优雅且设计精良的REST API。

2.2K40

【译】构建RESTful API的13种最佳实践

Facebook、GitHub、Google 以及其他许多巨头都需要一种服务和消费数据的方式。在当今的开发环境中,RESTful API 仍然是服务和消费数据的最佳选择之一。...设计 RESTful API 的最佳实践是什么?从理论上讲,任何人都可以在不到五分钟的时间内快速启动数据 API——无论是 Node.js,Golang 还是 Python。...假设你要检索所有作者。因此,你将调用以下端点:GET api.com/authors。 当你读取请求时,你无法判断 API 响应是否只包含一个或所有作者。因此,API 端点应该使用复数资源。...此外,我想检索一个名称为“ Michiel”的作者。该请求看起来像这样 api.com/authors?search=Michiel。...通常,API 的版本号包含在 API URL 中,例如:api.com/v1/authors/3/books。 8.通过 HTTP 标头发送元数据 HTTP 标头允许客户端随其请求发送其他信息。

2.5K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    13个构建RESTful API的最佳实践

    理论上来说,任何人都可以在5分钟内快速启动一个数据API。无论是Node.js、Golang,还是Python。 我们将探索构建RESTful API时应该考虑的13个最佳实践。...通常情况下,我们看到开发者使用POST请求来检索数据。此外,我们看到开发者使用PUT请求来替换资源,而他们只想更新该资源的一个字段。 确保使用正确的HTTP方法。...想象一下,你想检索所有的作者。因此,你会调用以下端点:GET api.com/authors 。 当你阅读请求时,你无法判断API响应将只包含一个或所有作者。...此外,我想检索名为Michiel的作者。请求看起来长这样:api.com/authors?search=Michiel 。 幸运的是,许多API项目都具有内置的搜索、分页、过滤和排序功能。...通常,API的版本号被纳入API的URL中,比如:api.com/v1/authors/3/books。 通过HTTP头发送元数据 HTTP头允许客户在其请求中发送额外的信息。

    1.8K20

    谷歌发布「与书对话」AI工具,从字里行间邂逅心仪书籍

    Talk to Books 是一个可以从书中的句子层面搜索书籍的全新检索模式;另一个互动内容则是 Semantris,一个由机器学习驱动的单词联想游戏。...论文地址:https://arxiv.org/abs/1803.11175 Talk to Books ? 以往我们在检索书籍时,通常会从书名、作者、主题等表面标签入手。...而谷歌发布的「Talk to Books」可以为用户提供一种检索书籍的全新方法。...用户只需要做一段相关描述,或是提一个相关的问题,那么 Talk to Books 可以在不依赖关键词匹配的情况下,从超过 10 万本书籍中检索所有句子,并根据句子层面的语义,找到能匹配用户陈述或问题的句子...地址:https://books.google.com/talktobooks Semantris ? Semantris 是一个由相同技术驱动的单词联想游戏。

    70670

    谷歌发布「与书对话」AI 工具,从字里行间邂逅心仪书籍

    Talk to Books 是一个可以从书中的句子层面搜索书籍的全新检索模式;另一个互动内容则是 Semantris,一个由机器学习驱动的单词联想游戏。...论文地址:https://arxiv.org/abs/1803.11175 Talk to Books ? 以往我们在检索书籍时,通常会从书名、作者、主题等表面标签入手。...而谷歌发布的「Talk to Books」可以为用户提供一种检索书籍的全新方法。...用户只需要做一段相关描述,或是提一个相关的问题,那么 Talk to Books 可以在不依赖关键词匹配的情况下,从超过 10 万本书籍中检索所有句子,并根据句子层面的语义,找到能匹配用户陈述或问题的句子...地址:https://books.google.com/talktobooks Semantris ? Semantris 是一个由相同技术驱动的单词联想游戏。

    47510

    Dataset Search | 数据集搜索专用引擎

    ,以及 Google Scholar 和 Google Books)一样可以免费使用,它基于拥有者对文件和数据库的分类方式来查找文件和数据集。...「到 11 月,我们接触的所有大学的数据都已经标记完成。我认为这对学界的开放数据而言是一项重要变革。」Hahnel 说道。...从「Object Detection」的搜索结果来看,来自 Kaggle 的数据集占了一小半,它们都会在 Kaggle 上提供下载与使用指南。...合作机构 谷歌这一尝试的早期支持者是美国国家海洋和大气管理局(NOAA)。该机构的职权范围从渔业到日冕,其档案包含近 7 万个数据集,包括 19 世纪的船舶日志。...和 Google Scholar 一样,Dataset Search 目前不提供自动化查询或应用程序编程接口(API),尽管谷歌表示将来可能会增加这一功能。

    1.8K20

    谷歌发布全新搜索引擎Talk to books

    /1 Talk to Books 以往我们在检索书籍时,通常会从书名、作者、主题等表面标签入手。...而谷歌发布的「Talk to Books」可以为用户提供一种检索书籍的全新方法。...用户只需要做一段相关描述,或是提一个相关的问题,那么 Talk to Books 可以在不依赖关键词匹配的情况下,从超过 10 万本书籍中检索所有句子,并根据句子层面的语义,找到能匹配用户陈述或问题的句子...地址:https://books.google.com/talktobooks Semantris 一个基于自然语言理解的游戏,通过输入模糊的描述词汇,消去屏幕中的单词 如图所示,用户输入「Photo...」时,最顶部的「Camara」因为与输入单词的关联最为紧密,因此会更替排序调整到第一位「消掉」。

    1.1K20

    谷歌推出数据集搜索专用引擎Dataset Search

    ,以及 Google Scholar 和 Google Books)一样可以免费使用,它基于拥有者对文件和数据库的分类方式来查找文件和数据集。...「到 11 月,我们接触的所有大学的数据都已经标记完成。我认为这对学界的开放数据而言是一项重要变革。」Hahnel 说道。...从「Object Detection」的搜索结果来看,来自 Kaggle 的数据集占了一小半,它们都会在 Kaggle 上提供下载与使用指南。...合作机构 谷歌这一尝试的早期支持者是美国国家海洋和大气管理局(NOAA)。该机构的职权范围从渔业到日冕,其档案包含近 7 万个数据集,包括 19 世纪的船舶日志。...和 Google Scholar 一样,Dataset Search 目前不提供自动化查询或应用程序编程接口(API),尽管谷歌表示将来可能会增加这一功能。

    1K20

    Redis 与 MongoDB 集成(一)

    Redis和MongoDB都是非常流行的NoSQL数据库。Redis通常用于缓存和高速读取,而MongoDB则适用于数据存储和快速检索。...当MongoDB需要进行读取时,它首先检查Redis缓存,如果Redis中有数据,则返回该数据,否则将从MongoDB中检索数据。...我们然后定义一个名为get_books的函数,它将用于检索所有books集合的数据。我们使用redis-py库创建一个Redis连接对象,并定义一个cache_key来标识缓存的数据。...接着,我们尝试从Redis缓存中获取数据。如果缓存中有数据,我们将使用json.loads方法将其反序列化,并将其分配给result_set变量。...现在,我们可以在任何需要访问books集合的地方调用get_books函数,它将检查Redis缓存,如果缓存中有数据,则返回缓存的结果,否则将从MongoDB中检索数据,并将结果存储在Redis中。

    2.1K20

    API设计最佳实践

    如果没有 API,你大部分喜欢的软件今天就不会存在。例如,Google Maps API 可以让你在 app 或 Web 应用中使用 Google Maps。...在大多数实际场景中,数据模型 已经存在,但由于我们将讨论 API 设计最佳实践,我将从头开始说起。...数据建模与结构化 以 API 为中心对您的数据进行建模,是设计易于创建、维护和更新 API 的第一步 在设计 API 时,尽量考虑使用通用的术语,而不是使用内部的复杂业务术语,因为这些术语在公司外可能不为人所知...https://api.domain.com/authors https://api.domain.com/authors/{id}/books 这有助于新的开发人员快速了解你的 API 是什么,以及如何遍历你的数据模型...API 通过使用一组 HTTP 命令来处理,这些命令定义了请求的性质和它应该做什么。 GET 从 API 中检索数据。它要求从 API 中获取数据的表示。

    1.1K20

    一文详解 API 设计最佳实践

    例如,Google Maps API 可以让你在 app 或 Web 应用中使用 Google Maps。如果没有它,你将不得不设计和开发自己的地图数据库。...API 设计最佳实践,我将从头开始说起。...https://api.domain.com/authors https://api.domain.com/authors/{id}/books 这有助于新的开发人员快速了解你的 API 是什么,以及如何遍历你的数据模型...API 通过使用一组 HTTP 命令来处理,这些命令定义了请求的性质和它应该做什么。 GET 从 API 中检索数据。它要求从 API 中获取数据的表示。...GET请求可以包含查询参数,以过滤从API接收的结果。 POST 向 API 提交一条记录,该记录将在数据库中创建一个资源。 PUT 一般用于更新服务器上的现有资源。

    1.1K20

    Elasticsearch open Inference API 增加了对 Cohere Rerank 3 模型的支持

    在测试中,Cohere 报告称,特别是重排模型从长上下文中受益。为了适应模型令牌限制,对文档进行分块是进行密集向量检索时的必要约束。...Cohere 重排以下部分假设您已经摄取了数据并执行了第一次搜索。这将为您提供一个基线,以了解在您第一次密集向量检索时搜索结果是如何排名的。...当您将此应用于自己的搜索体验时,我们建议您遵循 Cohere 的方法,用从第一次检索结果集中返回的完整文档中的上下文填充您的 input,而不仅仅是文档中的检索块。...在本文发表时,这个逻辑应该在您的应用程序代码中处理。在未来,检索器可以直接在单个 API 调用中配置为使用 Cohere rerank 推理端点。...在构建完整的 RAG 管道时,在您的应用程序代码中,您可以轻松地向 Cohere 的 Chat API 发出命令,附带用户查询和重排后的文档。

    98011

    从层到功能:探索 .NET 中的垂直切片体系结构

    这一切都是为了尝试一下,看看它如何满足您的需求。准备好探索了吗?让我们开始吧! 垂直切片架构,其中每个功能(例如,“创建书籍”和“创建用户”)都通过不同的层移动:UI、域、存储库和数据库。...一切都运行正常,直到有一天您需要访问 Books 切片中的 User 数据 — 也许是为了检查用户是否可以借书。呃哦!由于这些切片是独立的,因此您无法直接从 Books 切片访问 。...暴露的内部 API 端点 切片公开其他切片调用以交换数据的内部 API 端点,例如应用程序内的微型微服务。...对于结构化的切片间数据交换:内部 API 端点是您的迷你微服务解决方案。 选择错误的通信方式可能会造成混乱,所以问问自己:我的切片需要有多独立?我的使用案例是否需要立即响应,还是可以异步响应事件?...更清晰的所有权 自包含切片:团队完全拥有自己的功能,从表示到数据库逻辑。这使得责任更加明确,并避免在出现 bug 时推卸责任。

    58311

    一文详解 API 设计最佳实践

    例如,Google Maps API 可以让你在 app 或 Web 应用中使用 Google Maps。如果没有它,你将不得不设计和开发自己的地图数据库。...API 设计最佳实践,我将从头开始说起。...https://api.domain.com/authors https://api.domain.com/authors/{id}/books 这有助于新的开发人员快速了解你的 API 是什么,以及如何遍历你的数据模型...API 通过使用一组 HTTP 命令来处理,这些命令定义了请求的性质和它应该做什么。 GET 从 API 中检索数据。它要求从 API 中获取数据的表示。...GET请求可以包含查询参数,以过滤从API接收的结果。 POST 向 API 提交一条记录,该记录将在数据库中创建一个资源。 PUT 一般用于更新服务器上的现有资源。

    96320

    使用 ServerLess, Nodejs, MongoDB Atlas cloud 构建 REST API

    _tcp.cluster0-on1ek.mongodb.net 以上正是我在链接 MongoDB Alats 过程中遇到的问题,这里再多提下,希望能对你有帮助,因为这花费了我很长时间,尝试使用 Google...以下是我们将要完成的 REST API 规划,包含四个 CRUD 操作 CRUD API Routes Description POST /books 增加一本书 GET /books 获取所有书籍列表...); 编写业务逻辑 Books 将业务逻辑处理放在 Books 这个类里面,并且可以不依赖于外部的任何服务,this.BooksModel 这个在测试时可以模拟数据进行传入。...对于这种初始化链接的操作,尽量放在函数之外,避免每次函数来临都要去初始化这样一个耗时的操作,我们可以利用函数的执行上下文重用,在启动环境执行代码时去初始化我们的数据库链接,例如 handler.js 头部的...本文中在数据存储方面结合了 MongoDB Alats Cloud 免去了数据库的搭建、维护工作,现在只要你掌握一些 JavaScript 基础语法通过本文的讲解就可轻松的完成一个 REST API,这是多么

    3.9K20

    linux使用curl命令_如何使用curl从Linux命令行下载文件

    这些响应很可能是网页内容和文件,但是由于curl请求提出的“问题”,它们也可能包含通过Web服务或API提供的数据。    ...如果要检索的文件是二进制文件,则结果可能无法预测。 Shell可能会尝试将二进制文件中的某些字节值解释为控制字符或转义序列。    ...例如,参数可用于格式化返回的数据,或者可用于选择用户希望检索的确切数据。 通常可以使用curl与Web 应用程序编程接口 (API)进行交互。    ...format=json  Here’s another example that makes use of a Google API....如果我想与远程服务器或API交互,并可能下载一些文件或网页,则可以使用curl 。 特别是如果协议是wget不支持的众多协议之一。

    6K20

    C++中消息自动派发之一 About JSON

    而消息打包常用格式有:google protobuff,facebook thrift, 千千万万种自定义二进制格式,和JSON。...前三种都是二进制格式,针对C++开发者都是非常方便的,效率和包大小(数据冗余度)也比较理想。而JSON是字符串协议,encode和decode需要不小的开销。...我参考了一下google protobuf 和 facebook thrift,想设计如下消息定义方式。 2. 定义idl文件   interface description language ?...其实我只有消息格式描述,并无接口,但是idl比较容易接受。   假如说需要一个消息描述student的数据,那么使用 我定义idl描述其内容如下,student.idl //!...请求格式出错,抛出异常 typedef rapidjson::Document json_dom_t;   //!

    1.5K30

    老板与秘书的故事理解CORS(跨域),真的超级简单

    看的有点懵,现在举个现实中的例子:有一位公司的老板,他有一个秘书,秘书负责在办公室接通各个客户的电话后,会询问是谁从什么地方打来的电话,然后通知老板是否愿意与他们通话。...也会直接联系老板 从现实生活到软件工程访问,我们做一个对应: 给办公室打电话的人——前端应用程序 秘书-浏览器 老板-后端应用程序 访问的逐步顺序如下: 一旦前端应用程序尝试向后端 API 发送请求,浏览器就会向后端...API 发出所谓的预请求,并询问允许的选项:谁可以调用 API 以及可以发出什么类型的请求 API 发送带有此类选项的响应,并且(可选)包括浏览器应缓存这些依赖设置 如果前端应用程序及其尝试发出的请求位于允许列表内...当人你也可以更改其他的配置做一些尝试。...PUT请求,浏览器收到并继续发出真正的PUT请求,服务器响应并再次返回Access-Control-Allow-Origin:http://localhost:3333,允许浏览器的脚本执行服务器返回的数据

    64510
    领券