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

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

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

1.6K20

基于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属性,便于后面发起请求的时候做认证

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

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

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

    17320

    新手学习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名称要和宏定义中的名字保持一致

    1.9K30

    论文笔记:《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一下尝试绕过。

    67230

    iOS常用设计模式

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

    1.9K10

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

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

    45450

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

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

    6.2K101

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

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

    68110

    玩转大模型,彻底搞懂LangChain

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

    96910

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

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

    7710

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

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

    11410

    TensorFlow 2.0 中的符号和命令式 API

    命令式(或模型子类)API 在命令式风格中,您可以像编写 NumPy 一样编写模型。以这种方式构建模型就像面向对象的 Python 开发一样。下面是一个子类化模型的简单示例: ?...您可以使用内置的训练例程和损失函数(请参阅第一个示例,我们使用 model.fit 和 model.compile),或者如果您需要增加自定义训练循环的复杂性(例如,如果您喜欢编写自己的梯度裁剪代码)或损失函数...局限性 当前的符号 API 最适合开发层的有向无环图模型。这在实践中占了大多数用例,尽管有一些特殊的用例不适合这种简洁的抽象,例如,动态网络(如树状神经网络)和递归网络。...例如,您无法使用一致的 API 访问中间图层或激活。 相反,提取激活的方法是使用新的调用(或 forward)方法编写新类。...如果您的目标是易用性,低概念开销 (low conceptual overhead),并且您希望将模型视为层构成的图:使用 Keras Sequential 或 Functional API(如将乐高积木拼在一起

    1.3K20

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

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

    83620

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

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

    94420

    Java异常处理机制

    何为异常 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。 说得简单通俗点就是报错。 异常分类 这两张图可以让我们全面看到报错的类型。...在Java中,一旦方法抛出异常,系统自动根据该异常对象寻找合适异常处理器(Exception Handler)来处理该异常,把各种不同的异常进行分类,并提供了良好的接口。...当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并可以对其进行处理。...多重异常处理 这玩意和循环一样,也可以多重嵌套。 当程序可能会产生多种类型的异常,针对可能出现的不同异常如果希望做不同的处理,那么就可以使用多重catch。...程序级异常:由程序或者API程序抛出的异常。例如IllegalArgumentException 类,IllegalStateException类。

    49930

    如何让大模型与企业内部工具交互?ReAct框架

    目前大模型已经被广泛使用,并在处理人们的日常任务取得比较好的效果,如回答问题、辅助编写文档等。而大模型的大部分数据来源于互联网,如维基百科、书籍、等内容进行训练而成,面向个人用户。...在大模型引入到工作场景时,我们有可能需要需要面临的问题,如获取企业内部数据(大模型训练的数据为公共信知识,未进行企业内部信息训练)、获取实时信息(实时聊天记录、实时报表信息等)以及与企业工具交互(完成调用...ReAct框架允许大模型与外部工具交互获取额外的信息,从而给出更可靠和实际的行动。 大模型Agent功能,大模型会自己分析问题,选择合适的工具,最终解决问题。这个功能背后的原理是ReAct框架。...可以是用户的手动输入,也可以是依靠触发器(比如系统故障报警)。 2、LOOP:LLM模型开始分析问题需要的步骤(Thought),按步骤执行Act,根据观察到的信息(Obs),循环执行这个过程。...每次动作只选择一个工具,工具列表{工具名和描述} 输入:{调用工具时需要传入的参数} 观察:{第三方工具返回的结果} 【思考-动作-输入-观察】循环N次 思考:最后,输出最终结果 最终结果:针对原始问题

    94110

    【Web前端】从回调到现代Promise与AsyncAwait

    事件可以是用户操作(如点击、按键、鼠标移动等),也可以是浏览器内部的事件(如页面加载完成、窗口大小改变等)。 事件监听器: 事件监听器是用于添加事件处理程序的机制。...以下是如何为按钮点击事件添加事件监听器的示例: document.getElementById('myButton').addEventListener('click', function() {...事件循环的工作原理如下: 执行栈:JavaScript 的执行栈是按顺序执行代码的地方。当你在浏览器中编写 JavaScript 代码时,这些代码首先被推入执行栈。...事件队列是一个按顺序存储待处理事件的列表。 事件处理:当执行栈为空时(即当前执行的函数执行完毕),事件循环会从事件队列中取出下一个事件,并调用相应的事件处理程序。...执行事件处理程序:事件循环调用事件处理程序,该程序可能执行异步操作。 继续循环:事件循环继续检查执行栈是否为空,并重复上述步骤。

    6400

    再谈自动化测试——我们在编写测试时,应该注意什么

    用例之间不允许互相调用,也不允许出现执行次序的先后依赖。   BCDE原则   编写单元测试用例时,为了保证被测模块的交付质量,需要符合BCDE原则。   ...为了发现代码中潜在的错误,我们需要在编写测试用例时有一些强制的错误输入(如非法数据、异常流程、非业务允许输入等)来得到预期的错误结果。  ...我们可以看到,根据不同的策略,allocateHost里还会有好几个flow.而由于松耦合架构,我们可以在测试中轻易的模拟极端问题的出现,如:   找不到合适的BackupStorage   HostCapacity...在编写正确性测试时,我们可以考虑额外关注以下几点:   APIParam在各个Flow间中转时是否如预期   关注管理节点内的服务:   Flow之间调用的时序是否符合预期   Flow之间流转时,业务目标状态是否符合预期...  关注管理节点外的服务:   对于agent的请求是否符合预期   在API调用完后,相关资源的目标状态是否符合预期   而与文档结合的测试用例,则应当由团队的测试人员来定义.可以确定的是,这类的测试更加关注于

    1.1K10
    领券