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

你确定你的 REST API 真的符合 REST 规范?

在这篇文章中,我想分享一些例子,教你如何做到: 单元测试更简单、更可靠; 用户输入的预处理和验证; 自动序列化,确保响应一致性; 静态类型 但首先,让我们从 API 规范开始。...不过,OpenAPI 的结构有两个明显的缺点:过于复杂和冗余。例如,一个小项目就可以产生数千行 JSON 规范。手动维护该文件变得有些难。这对开发者来说是一个威胁。...3.模型序列化 几乎所有现代服务器框架都以这样或那样的方式使用对象关系映射(ORM)。这意味着 API 使用的大部分资源是由模型及其实例和集合表示的。...不过,当一个模型需要几个不同的 JSON 表示,或者当对象包含嵌套的实体关联时,就比较复杂了。这个时候,你可能会开始通过继承、重用和序列化器链接等特性来解决这些问题。...'value', param2: '777', param3: 'false' } 在这种情况下,请求将无法通过模型验证,因此你需要手动验证正确的参数格式,并将其转换为正确的类型。

1.6K20

FastAPI框架诞生的缘由(下)

因此,数据验证,序列化和文档编制必须以代码而非自动完成。或者必须像 Hug 框架这样将它们实现为 Falcon 之上。...基于这些类型提供验证和生成文档。 依赖注入系统。 它没有使用像第三方库(如Pydantic)提供数据验证,序列化和文档,它有自己的库。因此,这些数据类型定义将不太容易重用。 它需要更多详细的配置。...它不再是一个API Web 框架,因为创建者需要专注于Starlette。现在,APIStar 是一组用于验证 OpenAPI 规范的工具,而不是 Web框架。...FastAPI使用它来处理所有数据验证,数据序列化和自动模型文档(基于JSON Schema)。...Starlette 提供了所有基本的 Web 微框架功能。但是它不提供自动数据验证,序列化或API 文档。

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

    Python Web 框架 FastAPI

    FastAPI 与众所周知的 API 标准(即OpenAPI 和JSON schema)完全兼容。...可以通过访问应用程序中的特定端点来访问此文档,这使得理解和测试 API 变得非常容易,而无需手动编写大量文档。Python 类型提示:FastAPI 的突出功能之一是它使用 Python 类型提示。...数据验证: FastAPI 使用 Pydantic 模型进行数据验证。可以使用 Pydantic 的架构和验证功能定义数据模型。...这可确保传入数据自动验证、序列化和反序列化,从而降低在应用程序中处理无效数据的风险。异步支持:随着Python异步编程的兴起,FastAPI完全拥抱异步操作。...安全功能: FastAPI 包含各种开箱即用的安全功能,例如对 OAuth2、JWT(JSON Web 令牌)的支持以及请求数据的自动验证,以防止 SQL 注入和跨站点脚本 (XSS) 攻击等常见安全漏洞

    67410

    左手用R右手Python系列之——json序列化与反序列化

    在R语言中,涉及到json数据处理的,主要是list转换为json和json转换为普通的list。前者被称为序列化,后者被称为反序列化。...反序列化: 这里的反序列化就是指如何将一组json字符串反序列化为R语言中的list结构,这种需求在网络数据抓取中使用的及其频繁。...字符串中规定使用英文双引号来包裹所有key键名和字符串格式的value值,所有自己手动建立的包含有json字符串向量时,要使用英文单引号进行表示。...抓取的文章,你已经好奇为啥web返回的json原始字符串向量里面存在大量的“\”和“\r\n”。...(仔细观察你会发现json的数据格式与Python中的dict出奇的一致,确实挺像,但是很多细节明显不一样,比如布尔值,py中是True,json中是true) 反序列化同样涉及到自建json字符串。

    2.2K70

    Github 火热的 FastAPI 库,站在了这些知名库的肩膀上

    因此,数据验证,序列化和文档编制必须以代码而非自动完成。或者必须像 Hug 框架这样将它们实现为 Falcon 之上。...像 Hug(基于Falcon ) 一样,FastAPI 在函数中声明一个 response 参数。 在 FastAPI 这个是可选的,并且主要用于设置 Header,cookie 和备用状态代码。...基于这些类型提供验证和生成文档。 依赖注入系统。 它没有使用像第三方库(如Pydantic)提供数据验证,序列化和文档,它有自己的库。因此,这些数据类型定义将不太容易重用。 它需要更多详细的配置。...FastAPI使用它来处理所有数据验证,数据序列化和自动模型文档(基于JSON Schema)。...Starlette 提供了所有基本的 Web 微框架功能。但是它不提供自动数据验证,序列化或API 文档。

    6.3K30

    「译」使用 System.Net.Http.Json 高效处理Json

    在此之前我们是如何处理 JSON是一种普遍和流行的串行化格式数据来发送现代web api,我经常在我的项目中使用HttpClient 调用外部资源, 当 content type 是 “application.../json”, 我拿到Json的响应内容后,我需要手动处理响应,通常会验证响应状态代码是否为200,检查内容是不是为空,然后再试图从响应内容流反序列化 如果我们使用 Newtonsoft.Json, 代码可能是像下边这样...扩展,允许做这些操作就像调用单个方法一样简单 你可以在github阅读完整的设计文档,团队希望构建一个更加方便的独立发布的库,来在 HttpClient 和 System.Text.Json 使用,也可以在...HttpResponseMessage 来反序列化对象,我们看到,当手动调用api来解析JSON, 我们首先需要考虑比如响应状态是成功的, 并且是我们需要的媒体类型, Microsoft.AspNet.WebApi.Client...来进行Json的序列化和反序列化,不依赖于第三方库 Newtonsoft.Json, 使用这个库提供的扩展方法,通过很简洁的代码就可以通过HttpClient 来发送和接收数据,并且有更好的性能表现,

    1.6K20

    使用 System.Net.Http.Json 高效处理Json数据

    在此之前我们是如何处理 JSON是一种普遍和流行的串行化格式数据来发送现代web api,我经常在我的项目中使用HttpClient 调用外部资源, 当 content type 是 “application.../json”, 我拿到Json的响应内容后,我需要手动处理响应,通常会验证响应状态代码是否为200,检查内容是不是为空,然后再试图从响应内容流反序列化 如果我们使用 Newtonsoft.Json, 代码可能是像下边这样...扩展,允许做这些操作就像调用单个方法一样简单 你可以在github阅读完整的设计文档,团队希望构建一个更加方便的独立发布的库,来在 HttpClient 和 System.Text.Json 使用,也可以在...Json 请求到服务端,内部会创建一个 HttpRequestMessage 和 序列化成内容流 还有一种情况需要手动创建一个 HttpRequestMessage, 也许包括自定义请求头,你可以直接创建...HttpResponseMessage 来反序列化对象,我们看到,当手动调用api来解析JSON, 我们首先需要考虑比如响应状态是成功的, 并且是我们需要的媒体类型, Microsoft.AspNet.WebApi.Client

    2.6K00

    客户端存储

    (搜索操作需要手动遍历所有项。) 存储或读取大量的或复杂的数据结构时性能差,因为需要手动序序列化成字符串或将字符串反序列化。主要的浏览器实现只支持字符串(尽管规范没这么说的)。...这个存储有点像 SQL 表,但在这种情况下,对象的结构没有约束,所以不需要预先定义什么。所以这和 Web Storage 有点像,拥有多个数据库、每个数据库又有多个存储(store)的特点。...来看代码 本部分比较不同的 API 如何解决同一个问题。这个例子是一个 “地理情绪”(geo-mood) 签到系统,在那里你可以记录你在时间和地点的情绪。接口可让你在数据库类型之间切换。...UI 逻辑只知道有一个 store;它无需知道 store 是如何实现的,因为每个 store 的方法是一样的。...首先,我们使用 JSON 对象将结构序列化为字符串,因为大多数浏览器只支持字符串存储。 if (!

    2.2K20

    猿学-讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute

    ApiControllerAttribute是ControllerAttribute的子类,所以,框架在处理Controller发现的时候和ControllerAttribute标注的对象是一样的。...自动模型状态验证 这个是重点,框架会帮你自动验证model的state,也就是ModelState....(注:不过我就是因为用FluentValidation的时候模型验证不管用了出问题了才找到这篇文章的)....ASP.NET Core MVC里面有一个比较令人恼怒的问题你需要手动给参数指定[FromBody]这个特性,以便让系统知道如何从Request body里面反序列化他们,比如反序列化json。...行为自定义 像MVC框架的大部分组件一样,ApiControllerAttribute的行为是高度可自定义的。首先,上面说的大部分内容都是可以简单的用 on/off 来切换。

    1.2K00

    讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute

    ApiControllerAttribute是ControllerAttribute的子类,所以,框架在处理Controller发现的时候和ControllerAttribute标注的对象是一样的。...自动模型状态验证 这个是重点,框架会帮你自动验证model的state,也就是ModelState....(注:不过我就是因为用FluentValidation的时候模型验证不管用了出问题了才找到这篇文章的)....ASP.NET Core MVC里面有一个比较令人恼怒的问题你需要手动给参数指定[FromBody]这个特性,以便让系统知道如何从Request body里面反序列化他们,比如反序列化json。...行为自定义 像MVC框架的大部分组件一样,ApiControllerAttribute的行为是高度可自定义的。首先,上面说的大部分内容都是可以简单的用 on/off 来切换。

    83420

    讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute

    ApiControllerAttribute是ControllerAttribute的子类,所以,框架在处理Controller发现的时候和ControllerAttribute标注的对象是一样的。...自动模型状态验证 这个是重点,框架会帮你自动验证model的state,也就是ModelState....(注:不过我就是因为用FluentValidation的时候模型验证不管用了出问题了才找到这篇文章的)....ASP.NET Core MVC里面有一个比较令人恼怒的问题你需要手动给参数指定[FromBody]这个特性,以便让系统知道如何从Request body里面反序列化他们,比如反序列化json。...行为自定义 像MVC框架的大部分组件一样,ApiControllerAttribute的行为是高度可自定义的。首先,上面说的大部分内容都是可以简单的用 on/off 来切换。

    89620

    Django REST Framework 简介

    DRF可以轻松地与Django ORM和其他第三方库集成,这使得构建Web API变得非常简单。在DRF中,序列化器是一个重要的概念。...它们允许我们将复杂的数据模型序列化为JSON、XML或其他格式的数据,以便在Web API中使用。序列化器还可以将请求数据反序列化为模型实例,这使得处理用户提交的数据变得更加容易。...视图定义了API的行为,即如何响应请求、如何验证输入等。...这些路由器可以轻松地处理基于视图的URL配置,使得API的维护和扩展变得非常简单。DRF还提供了灵活的身份验证(Authentication)和权限(Permission)系统,以确保API的安全性。...它提供了许多有用的功能和工具,可以轻松地与Django ORM和其他第三方库集成,同时提供了灵活的身份验证和权限系统,确保API的安全性。

    1.3K20

    第138期:flutter中的json和序列化

    json模型的应用程序,使用手动序列化则除了无聊之外,有可能会产生不必要的问题和麻烦。...不需要别的依赖和其他的设置过程,对于验证一些快速的原型或者小型的项目非常有效。 当项目逐渐变的越来越大的时候,手动解码可能会表现的不尽人意。...虽然我们不能在Flutter中使用运行时反射,但有些库提供了类似的API,是基于代码生成。 使用dart:convert内置库手动进行序列化 Flutter中的基本JSON序列化非常简单。...服务器返回的数据是不确定的,所以有必要验证和保护客户端上的数据。...调用API与之前相同。 String json = jsonEncode(user); 使用json_serializable,我们可以放弃User类中的任何手动json序列化。

    2.3K30

    一文读懂:跨服务调用,用HTTP还是RPC?

    它遵循请求-响应模型,是一种无状态的、基于资源的协议。RPC(Remote Procedure Call)不是协议,而是一种调用方式或通信模型。...核心差异对比特性HTTP (以RESTful为例)RPC (以gRPC为例)通信协议文本协议(如JSON/XML)二进制协议(如Protobuf)性能表现头部开销大,序列化/反序列化开销大,性能相对较低报文体积小...,序列化快,传输效率高,性能更高接口定义松散(如OpenAPI/Swagger)严格(如Protobuf IDL文件)调用方式需要构建HTTP请求(方法、URL、头、体)像调用本地方法一样简单调试难度工具丰富...HTTP响应:包含状态码、响应头和响应体客户端解析响应:处理结果数据RPC 调用流程客户端调用本地存根(stub):就像调用本地方法一样存根序列化参数:将参数序列化为二进制格式通过网络发送数据:使用自定义或标准协议传输服务端反序列化参数...:定义好接口描述文件(如.proto)后,自动生成客户端和服务端代码,保证API一致性,减少手动编写代码的错误需要高效的流式通信:服务间有大量实时数据流、消息推送、长连接等需求(如实时监控、游戏、金融报价

    66410

    Zed 的 Settings 页面设计:比VS Code丝滑很多了!

    先看图说话(官方实拍vs用户脑补)VSCodeSettings(2025)ZedSettings(2025)|你得先成为“配置考古学家”|像搭乐高一样改设置|✨ZedSettings的四大「反内卷」设计原则...连consolas用户都能开)这个和jetbrainsIDE的设计非常相似,让用户无论是查询配置还是修改配置都变得很高效。...Thequickbrownfoxjumps...」示例主题切换:整个设置页同步变色(连按钮hover效果都实时更新)边框圆角:滑动时,Zed窗口四角肉眼可见变圆VSCode用户初体验反馈:“我拖着圆角滑块,看着编辑器窗口像融化的奶酪一样变软...(固定GitHubModels)支持GLM-4.7Claude3.5GPT-4o+自定义API行为控制无细粒度控制✅自动触发✅手动触发✅仅注释中触发隐私开关需查文档显眼提示:「你的代码永不发送给第三方,...✅支持settings.json覆盖(但默认隐藏)⚖️平手移动端适配❌(Electron重)✅iPad可流畅设置(ZedApp支持)Zed审美一致性混合风格(Web+Native)✅全自绘UI,圆角/动效

    43110

    DDIA 读书分享 第四章:编码和演化

    如何编码以适应数据的演化和兼容。 第一小节,以几种常见的编码工具(JSON,XML,Protocol Buffers 和 Avro)为例,逐一探讨了其如何进行编码、如何进行多版本兼容。...对应的,解码(Decoding)也有多种别称,解析(Parsing),反序列化(deserialization),反编组 (unmarshalling)。...因此写入模式和读取模式字段名顺序不一样无所谓。 忽略多出的字段。 对缺少字段填默认值。 Avro 两种模式进行匹配 模式演化规则 那么如何保证写入模式的兼容呢?...一般要通过某种手段进行验证,比如 OAuth。 有两种设计 HTTP API 的方法:REST 和 SOAP。 REST 并不是一种协议,而是一种设计哲学。...RPC 面临的问题 RPC 想让调用远端服务像调用本地(同进程中)函数一样自然,虽然设想比较好、现在用的也比较多,但也存在一些问题: 本地函数调用要么成功、要么不成功。

    1.6K20
    领券