首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

让 API 好用的 9 个小技巧

作者 | edmz 译者 | 王强 策划 | 万佳 多年来,已经为很多 API 实现了客户端。为此,整理了一份清单,列出了一些可以改善开发体验的小技巧。这些想法大都与 API 设计或架构无关。...添加 echo/ 测试方法 有时你只需要测试 API 是否活跃、工作正常。而且你手头可能没有文档,或者由于 API 的性质,调用一个仅用于测试和端点的方法可能会很复杂。...请换种方式标记它们并在错误描述添加注释,告诉用户联系支持。 为复杂转换加上各步的原始数据 出于某种原因,你需要用户通过一系列步骤 concat、哈希和加密一些数据?...你有一个需要以特定方式破坏数据的算法?请添加示例数据,告诉用户每个步骤具体的转换方法。并非所有语言都有相同方式工作或接收相同参数的库。...请将它们添加为文档相关函数的注释,或者其他合适的位置。 让用户知道如何联系到你 大多数 API 文档都没有写上咨询 API 技术问题的联系方式

31230

编写Docker Compose时要注意的五大常见错误

构建容器化的应用时,开发人员往往需要某种方法来引导启动目标容器,以对其进行代码级别的测试。尽管业界有许多方法可以实现该目的,但Docker Compose是目前最受欢迎的一种方法。...有时候,这些步骤可能会让整个测试过程比添加Docker之前还要慢。 解决方案:Docker外部运行代码 第一种解决方法Docker Compose启动所有的依赖项,然后本地运行测试代码。...因此,我们会选择使用主机卷将代码直接挂载到容器,以便原生的方式包含其了运行时依赖项的Docker容器运行自己的代码。...例如:Docker Compose,我们可以简单地将此cached关键字添加到卷挂载获得显著的性能保证。对应的代码如下: volumes: - "....例如,您的Web应用可能依赖于数据库,那么Web应用启动时,如果数据库尚未准备就绪,就会出现崩溃。 解决方案:使用depends_on depends_on使您可以控制启动的顺序。

2.1K21
您找到你想要的搜索结果了吗?
是的
没有找到

FastAPI(30)- Classes as Dependencies 类依赖注入

上面的栗子是将函数声明为依赖项,但这不是声明依赖项的唯一方法(尽管它会更常见) 关键点应该是依赖项是 callable 可调用的 Python callable 是像函数一样可以调用的对象 typing...的 Callable 教程 面向对象 __call__() 教程 看看 Depends() 的源码 第一个参数依赖项类型是 Callable,必须是可调用对象 类作为依赖项 类是可调用对象?...commons: CommonQueryParams = Depends(CommonQueryParams) 如果依赖项是一个类,推荐用这种方式写,因为 FastAPI 会自动调用依赖项类,创建类本身的实例对象...def test(self): self.info.update({"test_func": "调用方法添加的键值对"}) @app.get("/items3") async...class_dependency.DictListClass'> {'name': '小菠萝', 'address': ['广州', '深圳'], 'info': {'age': 24, 'test_func': '调用方法添加的键值对

46530

额,关于笛卡尔积CartesianProduct

笛卡尔积会产生shuffle? 有关窄依赖解惑 最后送一道面试题 1、笛卡尔积会产生shuffle?...: getDependencies方法: 整个过程map端执行,没有shuffle 2、有关窄依赖 这个如果在百度上搜相关内容,大部分都这么定义: 如果这样理解的话,就会很矛盾,笛卡尔积的依赖...,应该这么翻译:其中子RDD的每个分区依赖于父RDD的小部分区 后来,就想网上的说法是怎么来的呢?...翻了之前版本的源码,发现了出处: spark1.0版本的窄依赖注释:其中父RDD的每个分区最多由子RDD的一个分区使用 所以,想,恐怕现在网上流行的都是spark1.0版本的窄依赖定义,现在已经进化到...spark3了,应该以最新来 3、给一道面试题吧 join一定会发生shuffle

48420

面经手册 · 第29篇《Spring IOC 特性有哪些,不会读不懂源码!》

为什么这些无论从书本、课堂、面试都显得非常重要的知识,但是实际的编程没有提升你的编码能力呢?...首先这些这些知识实际的互联网业务开发,几乎是不常用的,几乎有锁和多线程的场景,为了性能的提升也基本都是采用分布式设计和实现了。...所以会了这些也几乎不太可能就把你的编码能提升起来,多数提升的是你查复杂bug时候有一臂之力。 就像会汉字就能写出诗词歌赋?懂RGB就能绘出山河大川?能蹦跳就可以舞出摇曳生姿?...Spring 管理 使用: xml 配置,有两种方式分别是:手动配置依赖、自动配置依赖,手动的大家基本很常用,自动的配置一般可能更多的对于注解的使用。...(工厂方法是静态的) 使用:核心在于 xml 配置添加 factory-method="getUserDaoByStatic",这样就可以初始化时候调用对应静态方法的实例化内容。

30430

编写干净的C#代码技巧

需要的时候添加注释 这是我们所有开发人员都讨厌的事情,不是?然而,从长远来看,添加几行评论/描述的方法确实能帮助你和其他开发人员。...无论何时(从任何地方)调用这个方法,Visual Studio都会显示您的注释。相信我,这很有帮助。 P.S. 只有情况需要的时候才添加评论。例如,当某个特定方法过于复杂,需要深入解释时。...在这种情况下,您需要添加注释。记住,维护注释也将成为一项任务,因此要有节制地使用注释。 重用代码 编写可重用的代码是非常重要的。它可以减少项目中的总代码行数,并提高效率。...把您的解决方案组织好 你构建结构化的解决方案?建立一个这样的系统是非常令人满意和重要的。下面是遵循洋葱架构的一个解决方案。 单个项目中仍然可以完成所有工作。...宁愿使用Git而不是注释掉代码。 使用方法链接 这是Microsoft默认生成代码中广泛使用的一种常见技术。在这里,每个方法返回一个对象,这些函数将被链接在一起。认识?

19630

面经手册 · 第30篇《关于 Spring getBean 的全流程源码解析》

从缓存获取 bean 实例 8. FactoryBean 获取 bean 实例 四、测试案例 1. 别名 2. 依赖 3....谢飞机:啊, 没用过 depends-on 不知道! 面试官:那你调试代码时候,看见过BeanName前面有 & 的情况,为啥会出现? 谢飞机:不配知道!再见!...而这部分知识的深入学习绝对不只是为了应付八股文,更多的是考虑到日常的 Spring 使用遇到复杂问题时有没有一个大致知晓的流程,可以快速定位问题,以及此类需求的技术实现方案是否能在以后的应用开发起到一定的指导作用...所以在你学习的时候如果找不到查看 getBean 源码的入口,也不方便调试熟悉源码时,可以写这样一个单元测试类,点入到 getBean 就可以阅读源码了。... 到 dependenciesForBeanMap 最后:getBean(dep),就可以获取到 depends-on 依赖的

58620

FastAPI的数据库操作终于整明白了!

大家好,是Kuls。 这是《小白学FastAPI》系列的第五篇文章。 如果你还没有看前面四篇文章,可以先去看下前面四篇再看此篇。...SessionLocal 还记得我们database.py创建的SessionLocal?...其实你可以简单理解成依赖注入,我们点进去看源码 我们可以发现Depends()里的参数有两个dependency、use_cache,我们主要关注的就是dependency,英文含义就是依赖,可以发现我们可以传入函数以及类...这个函数我们之前也有设计过,这里给你打印出来 # 博客首页 @app.get('/blog') def index(limit: int = 10, published: bool = True,...获取单篇博客 这里已经把它改造好了: @app.get('/blog/{id}') def showblog(id: int, db: Session = Depends(get_db)):

4.9K30

(进阶篇)Python web框架FastAPI——一个比Flask和Tornada更高性能的API 框架

同时支持多种请求方式 在上面的 login 例子可以发现,在上下文 request 通过判断路由的请求方式来进行响应的逻辑处理,比如如果不是 Post请求 就把它重定向到 login 页面等等...那么就需要同时支持多种请求方式了,巧合的是, FastAPI 文档找不到相应的说明,刚开始的时候也迷糊了一阵。所以,只能干源码了。... APIRouter 下有个叫 add_api_route 的方法,支持 http方法 列表的形式作为参数传入,所以就换成了下面这种写法: async def login(*,request: Request...数据验证 路由方法,有个叫 response_model 的参数,用于限制路由方法的返回字段。...还有茫茫的 FastAPI 文档尽可能摸索出一些易用,实用,好用的功能来和大家分享,并尝试投入到实际的生产环境,在这个过程中去学习更多的东西,体验更好的服务性能。

2.5K21

把函数包起来就是一个R包 - 完整开发指南

Depends R2.14之前只有这一种方法来表示依赖 LinkingTo在这里列出的包依赖于其他包的C或者C++代码 Enhances在这里列出的包可以被我们的包增强 Depends和Imports...://github.com/yihui/knitr/issues 对象文档化 man/ 标准方法man/文件夹下写.Rd文件,再渲染成HTML和PDF;但是可以使用roxygen2可以将特定格式的注释转化成....Rd文件,roxygen2除了生成.Rd文件外还可以更改NAMESPACE和DESVRIPTION的Collate字段 基本的流程有4步: 将roxygen格式的注释添加到.R文件 使用devtools...image-20200916144852749 Roxygen 注释 Roxygen注释#'开头,并且函数的前面;所有函数前面的roxygen行叫做一个block,每一行不超过80个字符 block...),第二个是测试代码块,{}括起来,由多个expectations组成 file 使用context写一个简短的介绍文件测试内容 roxytest roxytestroxygen2注释的形式来写测试

2K32

使用WireMock进行更好的集成测试

无论您是遵循传统的测试金字塔还是采用诸如“测试蜂窝”这样的较新方法,都应该在开发过程的某个时候开始编写集成测试用例。您可以编写不同类型的集成测试。...将WireMock配置分为几种方法并从测试调用它们是使用WireMock的方法。当然,您可以一个@Before方法设置所有可能的请求。...但是,如果您的测试某些云提供商的基础架构上运行,则无法确定该端口是否可用。因此,认为随机端口更好。 不过,Spring应用程序中使用属性时,我们必须某种方式将随机端口传递给我们的服务。...最好的情况下,最坏的情况下,所有线程都将等待永远不会到达的响应。 因此,我们应该添加一个模拟超时的测试。...---- 郑重声明:文章禁止第三方(腾讯云除外)转载、发表,事情原委测试窝,首页抄七篇原创还拉黑,你们的良心不会痛

2.4K20

写对代码的利器——“循环不变性”

初学者构建复杂代码时,往往会吃不准——这样写对?本文就从”不变性“(invariants)的角度,给大家一些增加信心的”打开方式“。 循环不变性 如果大家看过算法导论,应该对这个词不陌生。...粗略来说,算法,循环不变性(loop invariants)指的是迭代三个关键环节(初始化、迭代、结束时)上维持某种性质的不变。...通过迭代的三个环节中保持有序集的一直有序,我们可以很有信心:我们最后得到的数组一定是有序的。聪明的你可能已经感觉到了,这不就是数学归纳法?...对,只不过数学归纳法可以对任意规模进行归纳,而在算法迭代,通常有个结束条件。 这其实有一种”拆解“的思想在里面。我们人脑通常很难记太多的上下文,所以通常会通过拆解的方法来降低所面临问题的复杂度。...找到了上述需要维持的”不变性“,我们初始化、迭代维持和终止条件确定方面就非常”有法可依“了。可以看上面代码注释了解更多细节,这里就不赘述了。

6610

AI 结对编程:Microsoft Github Copilot 探索实践

预览版 Python/JavaScript/TypeScript/Ruby/Go 几门语言下的表现最好,官网展示了很多例子,大家可以去参考,本文 JavaScript 为例。...代码逻辑就是:编辑 index.js,获取 id 为 my-button 的按钮,然后添加 Click 事件。首先我们尝试用写注释方式生成代码。...实际体验,AI 的速度普遍都非常快,偶尔会卡顿一下,但基本都是秒级的响应速度。自动生成单元测试用例countDaysBetweenDates 方法写完后,我们可以给它编写单元测试用例。...官网还有个测试 React 计数组件 Counter 的例子,把英文注释改成了中文注释,同样是可以的:"重复代码"自动填充这里的"重复代码"更多的是指 Copilot 识别出了你正在编写的某种算法模式...个人认为现有的工作流引入 Copilot 是完全可以的,不过建议个人的项目中尝试体验,公司项目或敏感项目上使用时,需结合公司安全规范再考虑使用。

1.3K20

如何用最简单的方式解释依赖注入?

也就是说对对象的『依赖是注入进来的』,而和它的构造方式解耦了。构造和销毁这些『控制』操作也交给了第三方,也就是控制『反转』。 不举抽象的例子了。...测试环境可能会返回一个 Mock 的 FakeRedis。 redis 这个类是一个基础组件,可能好多类都需要用到,每个类都去自己实例化?如果需要修改的话,每个类都要改。...我们想依赖的是 redis 的 lpush 方法,而不是他的构造函数。 所以把 redis 这个类的实例化由一个单一的函数来做,而其他函数只调用对应的接口是有意义的。...Web 框架的依赖注入 上面提到的是依赖注入的原始定义,实际开发过程,Web 框架领域最喜欢提依赖注入这个 buzz word。...offset=100&limit=10 我们可以这样实现,其中 handler 函数的参数就是 URL 的参数: @app.get("/api/users") def list_users(offset

36140

编码质量之道

虽然我们可以借助与代码静态检测工具或者一些开发规约来约束开发者,使其编码趋于规范。但是很多开发者仍然不能写出高质量的代码。如何才能写出高质量的代码?想这是很多开发者关心的问题。...Q 这是对的? A 代码实现了需求,达到了期望。并且可以通过某种方式测试;最好通过自动化测试,或者至少通过手动测试。这才是对的! Q 这真的安全?...A 它是否让其他人轻松阅读,遵循并理解它,它是否有适当的注释,描述某段代码如何适应大局,它是否小的可读单元分解代码。永远不要让别人在维护你的代码的同时心里却在问候你祖宗十八代。...Q 它行之有效? A 是否高负载下运行良好,是否关心算法复杂度(没有过早优化),是否使用批处理,是否避免一次性在内存中加载大块数据,是否正确使用异步处理。 Q 它值得你引以为傲?...想我们可以将这些问题放在心里。经常问自己这些问题。慢慢你将具有一些强迫症。慢慢你也会形成像工匠一样的品质。加上现代化的编程工具,你的代码质量就会逐渐提高。

59820

Ask Apple 2022 与 Core Data 有关的问答

很遗憾, Core Data 并没有提供直接返回这些文件 URL 的 API( 或将 BLOB 转换成某种 URL 访问的方式 ),因此,当需要将数据以 URL 的方式进行传递时,就需要先将数据写到临时目录后才能进行...示例代码也看到了类似的问题。的问题是 - 此种使用方式是否存在已知问题?有什么特别要记住的?A:请使用 sysdiagnose 提交反馈报告以及受影响设备的存储文件。不止你一个人。...A:每个版本添加一个新的托管对象模型会更安全,但是如果您从一个版本到另一个版本的更改经过充分测试以表明适用于轻量级迁移推断,那么单个托管对象模型就足够了。...可以用其了解设备是否执行了某种云迁移或其他活动?A:Core Data 将元数据存储存储文件本身。此元数据归 Core Data 所有,不建议你更改它。...后,它会加密格式存储

2.8K20

微软是如何做 Code Review 的

每个审阅者都可以代码添加注释和评论。完成评审后,审阅者会将带注释的代码发送回 Rose。Rose 现在可以处理这些评论,并准备代码的新版本。 审阅者通常会查看一些信息:代码看起来是否有错误?...想简要介绍一下一些团队添加到代码审查过程的一些额外步骤。 包含测试结果的代码审查 您最想要的功能可能是通过“自动检测”的错误代码来节省时间。...的意思是,如果您可以运行自动化测试并意识到代码无法按预期工作,那么这就是您应该做的:在审查之前运行测试。 这就是为什么有些团队要求每次代码审查时都提交测试结果的原因。...这样就不会有人会忘记运行单元测试了。而且它可以确保在给定的代码更改下测试实际上已经运行并通过。 其他团队甚至更进一步,某种方式配置了代码审查工具:开发人员提交的每个代码审查都会触发构建。...该版本包含该确切的更改,并且还启动了一系列自动化测试。这个构建和这些测试的结果将附加到代码审查。通过这种方式进行配置,可以确保已使用公共代码库的最新代码对代码更改进行了测试

54410
领券