GraphQL strawberry的使用回顾和体会
GraphQL vs RESTful
简单来说GraphQL 比起 RESTful 集成额外一些功能
- 出入参校验、序列化 (简化后端编程)
- 自由可选的返回数据字段 (简化一些多余接口开发和沟通联调成本)
这些都是优点了。
开发效率在项目初期是很重要的,需要快速原型化。
但是后期稳定后,性能也很重要。
对比
RESTful + Pydantic
from sanic import Sanic, text
from pydantic import BaseModel
from typing import Listapp = Sanic("simple")class Simple(BaseModel):name: strage: inthobbies: List[str]@app.post("/rest")
async def rest_test(request):Simple.model_validate(request.json)return text("ok")
k6测试代码
import { check } from 'k6';
import http from 'k6/http';export default function () {let data = { "name": "Stephen Ling", "age": 28, "hobbies": ["coding", "coffee"] }const res = http.post('http://localhost:9090/rest', JSON.stringify(data), {headers: { 'Content-Type': 'application/json' },});check(res, {'is status 200': (r) => r.status === 200,});
}

GraphQL(strawberry)
k6测试代码
import { check } from 'k6';
import http from 'k6/http';export default function () {let data = {"query": "mutation {\n resolveGraphql(name: \"Stephen Ling\", age: 28, hobbies: [\"coding\", \"coffee\"])\n}"}const res = http.post('http://localhost:9090/graphql', JSON.stringify(data), {headers: { 'Content-Type': 'application/json' },});check(res, {'is status 200': (r) => r.status === 200,});
}
默认情况
import strawberry
from strawberry.sanic.views import GraphQLView
from sanic import Sanic, textfrom pydantic import BaseModel
from typing import Listapp = Sanic("simple")@strawberry.type
class Mutation:@strawberry.mutationasync def resolve_graphql(self, name: str, age: int, hobbies: List[str]) -> str:return "ok"@strawberry.type
class Query:@strawberry.fieldasync def nothing(self) -> None:...app.add_route(GraphQLView.as_view(schema=strawberry.Schema(query=Query,mutation=Mutation,),),"/graphql",
)

加上缓存
...
from strawberry.extensions import ParserCache, ValidationCache...
app.add_route(GraphQLView.as_view(schema=strawberry.Schema(query=Query,mutation=Mutation,extensions=[ParserCache(), ValidationCache()],),),"/graphql",
)

体会
- graphql 适合减轻前后端联调的沟通成本。谁错谁对一目了然。
- 选择实现库之前,衡量一下性能代价是否能接受。
- 实现库之间尽可能横向对比一下。
- 在可以忍受的性能差距下,我会选择开发效率,毕竟每个代码的生命周期是有限的,没有必要死磕。
相关文章:
GraphQL strawberry的使用回顾和体会
GraphQL vs RESTful 简单来说GraphQL 比起 RESTful 集成额外一些功能 出入参校验、序列化 (简化后端编程)自由可选的返回数据字段 (简化一些多余接口开发和沟通联调成本) 这些都是优点了。 开发效率在项目初期是很重要的,需要快速原型化。 但是后期稳定后&#…...
08无监督学习——聚类
1.什么是聚类任务? 类别:无监督学习 目的:通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。 1.1K均值聚类 步骤: 随机选取样本作为初始均值向量(初始值:k的值【即几个簇】)分别…...
Python使用OpenCV库对彩色图像进行通道分离
目录 1、解释说明: 2、使用示例: 3、注意事项: 1、解释说明: 在Python中,我们可以使用OpenCV库对彩色图像进行通道分离。通道分离是将彩色图像的每个像素分解为三个通道(红、绿、蓝)的过程。…...
前端面试:【CSS】盒模型、选择器、布局、响应式设计、Flexbox 与 Grid
CSS(层叠样式表)是用于控制网页外观和布局的重要语言。在这篇文章中,我们将深入探讨CSS的基础知识,包括盒模型、选择器、布局、响应式设计,以及弹性盒子(Flexbox)和网格布局(Grid&am…...
深入浅出通过PHP封装根据商品ID获取抖音商品详情数据方法
抖音商城商品详情数据是指商品在抖音商城中的展示信息,包括商品的标题、描述、价格、图片等。商家可以通过商品详情数据了解用户对商品的兴趣和需求,从而进行优化和调整。 商品详情数据还可以帮助商家评估商品的销售情况和市场竞争力,为制定…...
排序(七种排序)
1.插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 1.插入排序 1.1思路 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为 止,得到一个新的有序序列 1.2实现 //插入排…...
【工程优化问题】基于鲸鱼、萤火虫、灰狼优化算法的张力、压缩弹簧设计问题研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
sap ui5刷新页面的方式
1.第一种 window.location.reload();2.第二种 如果你想在UI5应用程序中使用MVC模式来处理页面刷新,可以通过重新加载当前路由来实现刷新。首先,确保你有一个Router对象实例: var oRouter = sap.ui.core.UIComponent.getRouterFor(this);然后&...
Java课题笔记~ Fastjson 概述
3.3 JSON串和Java对象的相互转换 学习完 json 后,接下来聊聊 json 的作用。 以后我们会以 json 格式的数据进行前后端交互。前端发送请求时,如果是复杂的数据就会以 json 提交给后端;而后端如果需要响应一些复杂的数据时,也需要…...
Arduino 入门学习笔记11 读写内置EEPROM
Arduino 入门学习笔记11 使用I2C读写EEPROM 一、Arduino 内置EEPROM介绍二、EEPROM 操作1. 包含EEPROM库:2. 写入数据到EEPROM:3. 从EEPROM读取数据4. 完整示例: 一、Arduino 内置EEPROM介绍 Arduino的内置EEPROM(Electrically E…...
【Nginx】安装make后遇到/bin/sh: 第 0 行:cd: ../pcre-8.38: 没有那个文件或目录
遇到/bin/sh: 第 0 行:cd: ../pcre-8.38: 没有那个文件或目录 需安装pcre 下载 http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz 上传到/usr/local下 pcre解压编译 tar -zxvf pcre-8.35.tar.gz mv pcre-8.35 /usr/local/src/cd /usr/local/src/p…...
在Windows Server 2008上启用自动文件夹备份
要在Windows Server 2008上启用自动文件夹备份,您可以使用内置的Windows备份功能。下面是如何设置它的方法: 1. 点击“开始”按钮并选择“服务器管理器”,打开“服务器管理器”。 2. 在“服务器管理器”窗口中,单击左侧窗格中的“…...
数据结构—线性表的查找
7.查找 7.1查找的基本概念 问题:在哪里找?——查找表 查找表是由同一类型的数据元素(或记录)构成的集合。由于“集合”中的数据元素之间存在着松散的关系,因此查找表是一种应用灵便的结构。 问题:什么查找&…...
EndNote(一)【界面+功能介绍】
EndNote界面: 顶上小图标的介绍: ①:同步 ②:分享 ③:检索全文 对于第三个(检索全文的功能): (不做任何操作的情况下的界面,检索全文的按钮是灰的&…...
JWT令牌验证
目录 一、JWT介绍 二、安装依赖 三、登陆接口 1、令牌工具类 2、接口代码 四、说明 一、JWT介绍 JWT全称:JSON Web Token (官网:JSON Web Tokens - jwt.io) 定义了一种简洁的、自包含的格式,用于在通信双方以json…...
【微信小程序】下拉刷新功能实现
微信小程序开发系列 文章目录 前言一、onPullDownRefresh函数二、实现1.开启下拉刷新2.监听下拉事件 前言 在开发微信小程序中经常会需要下拉页面进行更新要页面数据的功能,微信小程序提供了onPullDownRefresh函数。该函数作用是监听用户下拉动作。 一、onPullDown…...
三角函数与圆,角度和弧度 (草稿,建设中)
目录 1 三角函数与圆,角度和弧度 1.1 三角形 1.2 圆形 2 角度 3 弧度 rad 4 角度,弧度的换算 2 三角函数 1 三角函数与圆,角度和弧度 1.1 三角形 角度弧长sin()cos()tan() 1.2 圆形 半径,周长,弧长半径面积 …...
AIGC 施展“物理魔法”,3D视觉突破“精度极限”
点击关注 文|姚悦,编|王一粟 “没有艺术,全是物理!物理让你快乐,不是吗?” 近日,在世界计算机图形会议 SIGGRAPH 2023 上,英伟达创始人、CEO 黄仁勋宣布,将…...
redis 哨兵模式
目录 一、什么是哨兵模式 二、配置哨兵 三、启动哨兵 四、验证哨兵 五、复制延时 六、选举策略 一、什么是哨兵模式 哨兵也叫 sentinel,它的作用是能够在后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。 二、配置哨兵 首先停止…...
java八股文面试[java基础]——String StringBuilder StringBuffer
String类型定义: final String 不可以继承 final char [] 不可以修改 String不可变的好处: hash值只需要算一次,当String作为map的key时, 不需要考虑hash改变 天然的线程安全 知识来源: 【基础】String、StringB…...
3步解决Dell G15散热难题:TCC-G15开源散热控制工具完全指南
3步解决Dell G15散热难题:TCC-G15开源散热控制工具完全指南 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 你是否正在为Dell G15笔记本的过热问题…...
告别手动拖拽!用ENVI的Crosshairs和Cursor Value功能,精准搞定无坐标影像拼接
告别手动拖拽!用ENVI的Crosshairs和Cursor Value功能,精准搞定无坐标影像拼接 在遥感影像处理中,遇到没有地理参考信息的影像拼接任务时,很多用户的第一反应是手动拖拽对齐——这种看似直观的方法实际上效率低下且精度堪忧。想象一…...
Hotkey Detective:Windows快捷键冲突终极解决方案,3分钟快速定位占用程序
Hotkey Detective:Windows快捷键冲突终极解决方案,3分钟快速定位占用程序 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/h…...
XXMI启动器终极指南:一站式管理原神、星穹铁道等热门游戏模组
XXMI启动器终极指南:一站式管理原神、星穹铁道等热门游戏模组 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 还在为多个游戏模组安装繁琐而烦恼吗?XXMI启…...
如何快速解密QMC音频文件:qmc-decoder完整使用指南
如何快速解密QMC音频文件:qmc-decoder完整使用指南 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否遇到过从音乐平台下载的歌曲无法在其他播放器播放的情…...
告别付费电话!手把手教你用Linphone+SIP搭建免费语音视频通话系统(附服务器配置)
零成本构建企业级音视频通信系统:LinphoneSIP全栈实战指南 在远程协作成为主流的今天,企业每年为商业通信软件支付的订阅费用往往高达数万元。我曾为一家20人团队优化通信成本时发现,仅视频会议一项的年支出就超过3万元——而这一切完全可以通…...
告别臃肿!Dell G15笔记本散热控制的轻量级开源替代方案
告别臃肿!Dell G15笔记本散热控制的轻量级开源替代方案 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 你是否厌倦了Dell原厂AWCC软件的缓慢响应和…...
电容转换技术突破:电源小型化与高效能设计
1. 电源小型化革命:电容转换技术的突破想象一下,当你拆开最新款的智能手表,发现内部电源模块只占用了指甲盖大小的空间;或者当数据中心机架里的服务器,突然腾出了30%的空间用于增加计算单元。这正是德州仪器࿰…...
RedwoodJS执行器:命令执行与进程管理的终极指南
RedwoodJS执行器:命令执行与进程管理的终极指南 【免费下载链接】redwood RedwoodGraphQL 项目地址: https://gitcode.com/gh_mirrors/re/redwood RedwoodJS是一个功能强大的全栈JavaScript框架,它提供了一套完整的工具链来简化现代web应用的开发…...
EdgeRemover:Windows系统终极Edge浏览器管理完全指南
EdgeRemover:Windows系统终极Edge浏览器管理完全指南 【免费下载链接】EdgeRemover A PowerShell script that correctly uninstalls or reinstalls Microsoft Edge on Windows 10 & 11. 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeRemover 你是否…...
