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

架构师该如何为应用选择合适的API

前言: 架构师的主要活动是做出正确的技术决策。选择合适的API是一项重要的技术决策。那么今天就看看API的选择问题。 应用程序编程接口(API)是一种计算接口,它定义了多个软件中介之间的交互。...如果你的应用是由不同语言编写的,那么这里只能选择Socket通信作为应用之间的API手段。但是Socket通信是一种非常低Level的通信手段,它以底层的数据包作为抽象和通信内容,很难维护和使用。...REST只提供客户端调用服务器的选项,不支持服务器端发起请求。 于是新的API类型会出现来解决这些问题。...GraphQL提供的性能优于REST API,可以为前端开发人员带来回报。使用GraphQL规范创建服务器可能需要更多设置和编写预测性服务器端逻辑来解析和处理请求。...5.gRPC gRPC是一个开源的远程过程调用框架,用于在服务之间进行高性能的通信。这是将以不同语言编写的服务与可插拔支持(用于负载平衡,跟踪,运行状况检查和身份验证)相连接的有效方法。

2.2K20

基于Python编写一个调用API的类

现在后端开发基本上都是写各种API提供给别人使用,我在日常工作里既写API,也经常调用别人写的API。 分享一下经常使用的调用API的模块。 看代码之前会有一些假设,可以帮助理解代码。...一些假设 假设我们有一个API是: http://127.0.0.1:8000/api/token , 这个详细信息可以参考simple jwt 。 我在这里给一个简单的接口文档,如下。...Connection """ def __init__(self): # 通过环境变量来获取后端的host,而不是硬编码 self.api_url =..."Cache-Control": "no-cache", } def request_jwt(self): """ 用于调用.../api/token获取token, 调用的时候需要先从环境变量中获取用户名和密码, 获得token之后更新self.headers属性,便于后面发起请求的时候做认证

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

    如何为非常不确定的行为(如并发)设计安全的 API,使用这些 API 时如何确保安全

    .NET 中提供了一些线程安全的类型,如 ConcurrentDictionary,它们的 API 设计与常规设计差异很大。如果你对此觉得奇怪,那么正好阅读本文。...---- 不确定性 像并发集合一样,如 ConcurrentDictionary、ConcurrentQueue,其设计为线程安全,于是它的每一个对外公开的方法调用都不会导致其内部状态错误...API 用法指导 如果你正在为一个易变的状态设计 API,或者说你需要编写的类型带有很强的不确定性(类型状态的变化可能发生在任何一行代码上),那么你需要遵循一些设计原则才能确保安全。...API 设计指导 在了解了上面的用法指导后,API 设计指导也呼之欲出了: 针对典型的应用场景,必须设计一个专门的方法,一次调用即可完全获取当时需要的状态,或者一次调用即可完全修改需要修改的状态; 不要提供大于...1 个方法组合在一起才能使用的 API,这会让调用方获取不一致的状态。

    1.6K20

    语音通知接口调用实战:编写稳定的API请求与异常重试逻辑

    本文聚焦语音通知接口调用,从原理拆解、实战编码、异常处理三个维度,手把手教你编写稳定的API请求逻辑,搭配科学的异常重试机制,彻底解决接口调用的稳定性痛点。...一、开发者调用语音通知接口的核心痛点语音通知接口调用的过程中,新手和资深开发者都会遇到各类问题,这些问题直接影响接口调用的稳定性:参数配置错误:如mobile格式不规范(未按11位手机号+掩码规范,如1398888...二、语音通知接口调用的底层原理拆解要编写稳定的请求逻辑,首先需理解语音通知接口调用的核心原理,以主流的语音通知接口为例,其核心交互逻辑分为三步:身份验证:接口通过account(APIID)和password...3.1基础请求代码实现首先编写基础的请求代码,包含动态密码生成、参数拼接、请求发送,同时标注关键参数的获取方式:展开代码语言:PHPAI代码解释调用的核心是参数规范(如mobile格式、动态密码生成)和异常处理,这是稳定调用的基础;指数退避重试逻辑能有效解决网络波动、接口临时不可用导致的偶发失败问题;不同调用方案适配不同场景,生产环境优先选择

    8510

    新手学习FFmpeg - 调用API编写实现多次淡入淡出效果的滤镜

    完整的代码可参考 https://andy-zhangtao.github.io/ffmpeg-examples/ 因为我是新手,所以本着先易后难的原则(其实是不会其它高深API的操作),从fade滤镜入手来仿制一个...如果想一次实现多个fade效果,那么就要通过-filter-complex来组合多个fade,并合理安排调用顺序,稍显麻烦。 这次,ifade就尝试支持在同一个视频中实现多次fade效果。...如果我们假设淡入的背景颜色是黑色(默认色),当s->factor==0时,渲染强度最大,此时渲染出的就是一个纯黑的画面。...通过不停的判断每帧的frame_timestamp和start_time+duration之间的关系(通过start_frame同理),来决定是否结束渲染。...在编写filter时,ffmpeg提供了AVFILTER_DEFINE_CLASS这个宏来生成默认的avclass和options,所以一定要注意class名称和options名称要和宏定义中的名字保持一致

    2.2K30

    论文笔记:《Bringing Balance to the Force Dynamic Analysis of the Android Application Framework》

    对于一些比较敏感的底层系统API,安卓系统通过Binder封装后对外提供一些High-Level的API用于调用,在调用时则会进行权限检查。...:权限申请(如相机权限)首先需要在Manifest中静态申请,而申请完成后的权限是否能够动态的调用则由AppOps进行管理 Research Questions   本文想要设计一个动态测试工具来为Android...难点在于这些API分散在不同的Service之中,并且可能分别由Java或者C++代码实现。 RQ2: 如何为这些API构建输入。属于时Fuzz的经典问题。 RQ3: 如何衡量动态测试的覆盖率。...app,安装在测试机上,用于接收TM的控制指令并调用系统API。...工作流程大致如下:   就是循环遍历不同inputs和Strategies,然后遇到安全检查没通过就hook一下尝试绕过。

    83130

    iOS常用设计模式

    缺点:如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。...逃避构造函数的约束。 外观模式 优点:减少系统相互依赖、提高灵活性、提高了安全性。 缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。 工厂模式 何为工厂模式?...工厂模式的优缺点? 优点: 一个调用者想创建一个对象,只要知道其名称就可以了。 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 屏蔽产品的具体实现,调用者只关心产品的接口。...如内部变化复杂,会有很多的建造类。 命令模式 何为命令模式? 命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。...调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 主要解决的问题?

    2.2K10

    迎接智能自动化:基于Dify工作流打造自主决策测试智能体

    我们需要的不是更快的“脚本执行器”,而是一个能够观察、思考、决策并行动的自主智能体。二、破局:何为“能思考、会决策”的自主测试智能体?...想象一下,你有一位不知疲倦的、资深的新人测试员:环境感知:它能实时“看到”应用的当前状态(如页面URL、DOM元素、API响应)。...这可以是一个封装了浏览器操作(点击、输入)的API,或直接在工作流中调用 Playwright 服务。...我们设定一个循环终止条件,例如:动作执行节点:这是一个 HTTP 请求节点。它接收来自决策节点的JSON指令,将其转换为对 POST /action 接口的调用,真正在浏览器中执行操作。...执行节点调用API,在浏览器中输入用户名。循环:它再次感知状态(页面可能没变)。大脑再次思考:“用户名已输入,现在该输入密码了。”

    55610

    Effective-java-读书笔记之通用程序设计

    字符串不适合代替枚举类型, 聚集类型, 也不适合代替能力表(capabilities).总而言之, 如果可以使用更加合适的数据类型, 或者可以编写更加适当的数据类型, 就应该避免用字符串来表示对象....当两个字符串被连接在一起时, 它们的内容都需要被拷贝.连接多个项目, 为了性能, 请使用StringBuilder的append().第64条 通过接口引用对象如果有合适的接口类型存在, 那么对于参数,...66条 谨慎地使用本地方法Java Native Interface (JNI)允许Java应用程序可以调用本地方法(native method), 即本地程序设计语言(C或者C++)来编写的特殊方法...., 且难以阅读.第67条 谨慎地进行优化不要因为性能而牺牲合理的结构.努力避免那些限制性能的设计决策.要考虑API设计决策的性能后果.为了性能而包装API -> bad idea.在每次试图做优化之前和之后..., 要对性能进行测量.总而言之, 不要费力去编写快速的程序, 应该努力编写好的程序, 速度自然会随之而来.在设计系统的时候, 特别是在设计API, 线路层协议和永久数据格式的时候, 一定要考虑性能的因素

    57350

    灵魂追问 | 教程那么多,你……看完了吗?

    教程 | 深度学习:自动编码器基础和类型 入门 | 请注意,我们要谈谈神经网络的注意机制和使用方法 教程 | 经典必读:门控循环单元(GRU)的基本概念与原理 入门 | 迁移学习在图像分类中的简单应用策略...对比MATLAB、Torch和TensorFlow 教程 | 初学者如何选择合适的机器学习算法(附速查表) 经验之谈:如何为你的机器学习问题选择合适的算法?...:TensorFlow项目架构模板 TensorFlow初学者指南:如何为机器学习项目创建合适的文件架构 教程 | 七个小贴士,顺利提升TensorFlow模型训练表现 教程 | 如何从TensorFlow...版深度学习软件安装指南 教程 | 一步步从零开始:使用PyCharm和SSH搭建远程TensorFlow开发环境 实用指南:如何为你的深度学习任务挑选最合适的 GPU?...(最新版) 深度 | 英伟达Titan Xp出现后,如何为深度学习挑选合适的GPU?这里有份性价比指南 Titan XP值不值?

    6.7K101

    Agent设计模式——**常见问题解答:Agentic 设计模式**

    工具使用(Tool Use):Agent 借助外部工具(如代码解释器、搜索引擎或其他 API)获取信息或执行自身无法完成操作的模式。...虽常被混用,但"工具"通常指 Agent 可调用的外部资源(如天气 API、计算器);"技能"则是 Agent 通过学习获得的更集成化能力,往往结合工具使用与内部推理以执行特定功能(如"航班预订"技能可能涉及日历与航空...Agent 轨迹是任务执行全过程的完整步骤记录,涵盖所有思考过程、操作行为(工具调用)及环境观察。分析这些轨迹是调试与理解 Agent 行为模式的核心手段。 如何为非确定性系统构建可靠测试?...工具规格说明:可用工具清单、功能描述及调用规范(如特定函数调用格式)。 约束与规则体系:明确禁止行为指令(如"未经批准禁止使用工具"、"不提供金融建议")。...示范轨迹案例:提供若干成功"思考-行动-观察"循环实例,可大幅提升 Agent 行为可靠性。 何为"提示泄漏"?

    38610

    Python中的asyncio处理异步任务

    如何在商务活动中使用猴子音悦音乐授权的背景音乐,并利用Python中的asyncio处理异步任务摘要本文将介绍如何为商务活动选择合适的背景音乐,特别是通过猴子音悦音乐授权获取高质量的配乐。...猴子音悦音乐授权的优势版权清晰:确保所有音乐都有明确的版权归属,避免侵权风险。多样选择:提供多种风格和类型的音乐,满足不同场景的需求。专业服务:专业的客服团队帮助您快速找到合适的背景音乐。...Python中如何使用asyncio处理异步任务异步编程简介异步编程是一种编程模式,它允许程序在等待某个耗时操作(如I/O操作)完成的同时继续执行其他任务。这种方式可以显著提高程序的执行效率。...asyncio.run(main()) 启动事件循环并运行主函数。注意事项避免阻塞调用:在异步函数中尽量不要使用会阻塞的调用,否则会降低整体性能。...总结通过选择合适的背景音乐,尤其是利用猴子音悦音乐授权提供的丰富资源,可以有效提升商务活动的效果。

    13810

    不愧是疑问解决神器(二)!你强任你强

    • 最简单的重复代码就是在一个类或方法总,存在两个函数相同相同的表达式。 • 此时可采用提炼函数的方式来提炼出重复的代码,然后让重复调用这段代码的地方都改为同一个函数命名。...• 霰弹式的修改类似于发散式变化,但却恰恰相反。7.1 何为霰弹式修改?7.2 如何对霰弹式的程序进行修改?...如果有很多函数在操作相同的是数据,可将这些函数整合成类 3. 常用策略是使用内联相关的重构,如内联函数,内联类等等,把本不该分散的逻辑组合在一处。 8. 依恋情结(Feature Envy)?...• 何为过长的消息链? • 一个用户向一个对象请求另一个对象,然后再想后者请求另一个对象,然后再请求另一个对对象,循环往复。 • 如何针对过长的消息连进行重构?...• 这个技艺就是测试驱动开发(Test-Driven Development, TDD) • 测试驱动开发的短循环? • 先编写一个测试 —> 编写业务代码 —> 重构。

    23810

    玩转大模型,彻底搞懂LangChain

    尤其对于那些不熟悉大语言模型领域,或者初入此领域的开发者来说,选择一个合适的工具尤为重要。...LangChain还为开发者集成了丰富的内置链组件,为开发者解决了重复编写代码的问题。面对特定的任务,如摘要或问答,LangChain提供了专门的摘要链和问答链,简化了开发流程。...在LLM应用开发中,一个经常被遗漏但至关重要的环节是,如何为LLM编写合适的提示词,确保LLM能够准确理解开发者的意图。对于许多开发者,特别是初学者来说,这可能是一个具有挑战性的任务。...以SQL查询为例,这是一个对许多开发者来说相对熟悉,但在与LLM结合时可能存在困惑的领域。如果一个开发者刚开始接触如何为SQL编写提示词,他可以轻松地在LangChain中找到SQL组件的提示词模板。...模型包装器这种包装方式允许开发者与不同模型平台底层的API进行交互,从而简化了大语言模型的调用,降低了开发者的学习成本。此外,其输出解析器也能帮助开发者从模型输出中提取所需的信息。 2.

    1.4K10

    弥补大语言模型的短板,一文读懂LangChain框架

    尤其对于那些不熟悉大语言模型领域,或者初入此领域的开发者来说,选择一个合适的工具尤为重要。...LangChain还为开发者集成了丰富的内置链组件,为开发者解决了重复编写代码的问题。面对特定的任务,如摘要或问答,LangChain提供了专门的摘要链和问答链,简化了开发流程。...在LLM应用开发中,一个经常被遗漏但至关重要的环节是,如何为LLM编写合适的提示词,确保LLM能够准确理解开发者的意图。对于许多开发者,特别是初学者来说,这可能是一个具有挑战性的任务。...以SQL查询为例,这是一个对许多开发者来说相对熟悉,但在与LLM结合时可能存在困惑的领域。如果一个开发者刚开始接触如何为SQL编写提示词,他可以轻松地在LangChain中找到SQL组件的提示词模板。...模型包装器这种包装方式允许开发者与不同模型平台底层的API进行交互,从而简化了大语言模型的调用,降低了开发者的学习成本。此外,其输出解析器也能帮助开发者从模型输出中提取所需的信息。 2.

    1.1K10

    【设计自定义工作流函数调用AI】

    工作流的核心在于将重复性任务通过API调用AI模型实现自动化。 确定需要AI助手介入的场景,例如邮件自动回复、会议纪要生成、数据汇总分析等。...为每个场景编写清晰的提示词(prompt)模板,确保AI理解任务目标和输出格式。使用编程语言(如Python)封装这些提示词为可调用的函数。...选择合适的技术栈 基础技术栈包括API调用库(如OpenAI的Python库)、任务调度工具(如Apache Airflow或Windows任务计划程序)以及数据存储(如SQLite或Notion数据库...持续优化机制 建立反馈循环提升AI输出质量。记录每次调用的输入输出和用户评分,定期分析常见问题。可通过微调(fine-tuning)创建专用模型,或优化提示词模板增加约束条件。...API调用建议实施速率限制和用量监控,避免意外超额收费。对于团队使用场景,需建立权限管理系统,不同角色分配不同的函数调用权限。

    26210

    PHP 程序员如何为 AI 浏览器(如 ChatGPT Atlas)优化网站

    二、技术结构优化 — PHP 站点如何为 AI 爬虫做好“可抓取”AI 工具在抓取你的网站内容时,与传统搜索引擎抓取类似,但也有特殊要求。...(TECHCOMMUNITY.MICROSOFT.COM)如果你的网站有 API(例如产品查询、库存、文章检索等),可以考虑暴露一个规范的 OpenAPI JSON 文件,或者在 .well­known...3.2 使用“用户查询为中心”的自然语言结构写作时站在用户提问的角度:他们可能问“如何为 AI 浏览器优化网站?”而不只是“网站优化技巧”。使用问题型标题/段落(FAQ 样式)更有助被 AI 抓取。...3.4 添加丰富媒体 +辅助内容插入合适图片、图表、视频,可以提高页面内容的丰富度,从而提升在 AI 推荐结果中的机会。...考虑未来扩展(如 agent 可调用):如果你的网站提供 API,可考虑编写 OpenAPI 规范,并公开 .well-known/ai-plugin.json 或类似元数据。

    21010

    提高代码质量:如何编写函数

    如何为变量和函数命名一直是开发者心中的痛点之一,对于母语非英语的我们来说,更是难上加难。...下面我来说说如何为函数命名的一些想法和感受: 采用统一的命名规则 在谈及如何为函数取一个准确而优雅的名字之前,首先最重要的是要有统一的命名规则。这是提高代码可读性的最基础的准则。...举个例子,假设我们做一个添加评论的功能,添加完毕后并返回评论总数量,如何命名比较合适呢? ?...正确的方式应该是分解函数,让函数只做一件事。 编写函数体 函数体就是实现函数功能的整个逻辑,是一个函数最关键的地方。下面我谈谈关于函数代码编写的一些个人想法。...for循环嵌套优化 for循环嵌套相比于if嵌套来说更加复杂,阅读起来会更麻烦,下面说说几点要注意的东西: 1、最多只能两层for循环嵌套 2、提取内层循环到新函数中 3、多层循环时,不要简单地位索引变量命名为

    1.2K20

    提高代码质量:如何编写函数

    如何为变量和函数命名一直是开发者心中的痛点之一,对于母语非英语的我们来说,更是难上加难。...下面我来说说如何为函数命名的一些想法和感受: 采用统一的命名规则 在谈及如何为函数取一个准确而优雅的名字之前,首先最重要的是要有统一的命名规则。这是提高代码可读性的最基础的准则。...举个例子,假设我们做一个添加评论的功能,添加完毕后并返回评论总数量,如何命名比较合适呢? ?...正确的方式应该是分解函数,让函数只做一件事。 编写函数体 函数体就是实现函数功能的整个逻辑,是一个函数最关键的地方。下面我谈谈关于函数代码编写的一些个人想法。...for循环嵌套优化 for循环嵌套相比于if嵌套来说更加复杂,阅读起来会更麻烦,下面说说几点要注意的东西: 1、最多只能两层for循环嵌套 2、提取内层循环到新函数中 3、多层循环时,不要简单地位索引变量命名为

    1.3K20

    技巧:我们在编写测试时,应该注意什么

    用例之间不允许互相调用,也不允许出现执行次序的先后依赖。 BCDE原则 编写单元测试用例时,为了保证被测模块的交付质量,需要符合BCDE原则。...B: Border,边界值测试,包括循环边界、特殊取值、特殊时间点、数据顺序等。 C: Correct,正确的输入,并得到预期的结果。 D: Design,与设计文档相结合,来编写单元测试。...,allocateHost里还会有好几个flow.而由于松耦合架构,我们可以在测试中轻易的模拟极端问题的出现,如: 找不到合适的BackupStorage HostCapacity的不够 Agent返回的回复在某一个时刻与管理节点的状态不同...Correct Test && Design Test 正确性测试听起来应该会很简单,(比如调用一个API,然后看结果返回是否正确)但如果放到集成测试中,我们还是可以拓展出一些额外的关注点的.还是以上面提到的...: Flow之间调用的时序是否符合预期 Flow之间流转时,业务目标状态是否符合预期 关注管理节点外的服务: 对于agent的请求是否符合预期 在API调用完后,相关资源的目标状态是否符合预期 而与文档结合的测试用例

    28310
    领券