MuleSoft 中的细粒度与粗粒度 API

API 设计是一个令人着迷的话题。API 设计的一个重要方面是根据 API 的特性和功能确定正确的“大小”。所有建筑师都必须在某个时候解决过这个问题。在本文中,我将尝试对我们在获得“正确的”粒度 API 之前需要考虑的各种参数进行一些深入的探讨:

可维护性: 首先想到的是 API 的可维护性。粗粒度的 API 很难维护。随着 API 使用者需求的增长,添加更多的实现变体或参数将变得困难。

管理:在MuleSoft中,我们可以使用API​​ Manager来单独管理每个API。这意味着我们可以根据需要对每个 API 实施 IP 白名单、IP 黑名单、基于 SLA 的速率限制、JSON 威胁防护等安全策略。由于每个安全策略都会增加一点延迟,因此这成为一个重要的考虑因素。 

错误处理: 您可以在不同的 API 中应用更清晰的错误处理。这也可能导致为不同的 API 定义 MuleSoft 警报

可部署性:细粒度的 API 易于部署。如果正确遵循版本控制,我们可以快速部署较小的 API,并以更敏捷的方式向市场推出功能。这通常会缩短创新周期,因为更改和新功能可以更快地部署到生产中

可扩展性:Cloudhub工作线程独立分配给每个API实现,因此可以根据每个API实现的特定需求进行调整(缩放)

资源:每个 API 实现无论有多小,都会消耗最少的一组资源(CloudHub 工作线程),而更多的 API 实现(即使它们更小)通常
意味着总体资源使用量更高

复杂性:较小的 API 和 API 实现更简单,因此更容易理解和维护。与更大且更少的 API 和 API 实现相比,它们还会导致应用程序网络中可见更多与 API 相关的资产以及越来越复杂的交互(API 调用)。然而,由于这些 API 之间的交互,具有许多细粒度 API 的大型系统将非常复杂

延迟:每个额外的 API 调用至少会增加少量延迟,因此较小的 API 会导致较高的总体延迟,通常必须通过缓存等来缓解。对于体验 API,请仔细考虑此参数。移动订单 API 比基于 Web 的订单 API 对延迟更加敏感。

故障模式:每个额外的 API 调用都是应用程序组件之间的额外远程交互
,必须解决其潜在故障。另一方面,粗粒度的 API 可能会成为单点故障。

组织结构:在任何大型组织中,不同的业务线如果具有不同的限界上下文,则必须相互交互。通过细粒度 API,每个 API 都可以独立于所有其他 API 实现而实现,前提是 API 实现之间的应用程序接口(以 API 规范的形式)已达成一致。这意味着通过细粒度的 API 和 API 实现,团队组织和实现工作的并行化将更加灵活。

重要的是要记住,这两种方法的整体功能保持不变,但最终使用细粒度 API 方法会获得更多的端点。作为开发人员,您可以放心,您的代码将更加结构化,因为每个 API 对应不同的操作。在大多数情况下,您都需要这两种 API。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/191970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Doris 数据导入四:Binlog Load 方式

Binlog Load提供了一种使Doris增量同步用户在Mysql数据库的对数据更新操作的CDC(Change Data Capture)功能。 1 适用场景 INSERT/UPDATE/DELETE支持。 过滤Query。 暂不兼容DDL语句。 2 基本原理 在第一期的设计中,Binlog Load需要依赖canal作为中间媒介,让canal伪造成一个…

【数据库】数据库基于封锁机制的调度器,使冲突可串行化,保障事务和调度一致性

封锁使可串行化 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更…

Linux查看计算机处理器相关的信息

采用命令lscpu。部分结果如下:

MicroPython标准库

MicroPython标准库 arraybinascii(二进制/ASCII转换)builtins – 内置函数和异常cmath – 复数的数学函数collections – 集合和容器类型errno – 系统错误代码gc – 控制垃圾收集器hashlib – 散列算法heapq – 堆队列算法io – 输入/输出流json – JSON 编码和解码math – 数…

详解Spring中BeanPostProcessor在Spring工厂和Aop发挥的作用

😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783…

【开源】基于Vue+SpringBoot的音乐平台

项目编号: S 055 ,文末获取源码。 \color{red}{项目编号:S055,文末获取源码。} 项目编号:S055,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示 四、核心代码4.1 查询单首…

Vue安装及环境配置详细教程

一、下载node.js 访问node.js官网:Download | Node.js 选择Windows Installer (.msi)的64-bit进行下载。 在E盘新建一个文件夹,取名为nodejs,也可以在其他盘符新建。 在安装node.js时,点击Change...,进行切换盘符安…

使用 STM32 微控制器读取光电传感器数据的实现方法

本文介绍了如何使用 STM32 微控制器读取光电传感器数据的实现方法。通过配置和使用STM32的GPIO和ADC功能,可以实时读取光电传感器的模拟信号并进行数字化处理。本文将介绍硬件连接和配置,以及示例代码,帮助开发者完成光电传感器数据的读取。 …

<JavaEE> 什么是线程安全?产生线程不安全的原因和处理方式

目录 一、线程安全的概念 二、线程不安全经典示例 三、线程不安全的原因和处理方式 3.1 线程的随机调度和抢占式执行 3.2 修改共享数据 3.3 关键代码或指令不是“原子”的 3.4 内存可见性和指令重排序 四、Java标准库自带的线程安全类 一、线程安全的概念 线程安全是指…

vue3高雅的使用useDialog

在Vue 3中,我们可以使用useDialog自定义指令来高雅地实现对话框的功能。以下是一个简单的示例: 首先,我们需要创建一个名为useDialog.js的文件,并在其中定义我们的自定义指令: // useDialog.js import { ref } from …

无人机助力电力设备螺母缺销智能检测识别,python基于YOLOv7开发构建电力设备螺母缺销小目标检测识别系统

传统作业场景下电力设备的运维和维护都是人工来完成的,随着现代技术科技手段的不断发展,基于无人机航拍飞行的自动智能化电力设备问题检测成为了一种可行的手段,本文的核心内容就是基于YOLOv7来开发构建电力设备螺母缺销检测识别系统&#xf…

Android 13 - Media框架(21)- ACodec(三)

这一节我们将继续来学习 ACodec 的剩余部分。 enum {kFlagIsSecure 1,kFlagPushBlankBuffersToNativeWindowOnShutdown 2,kFlagIsGrallocUsageProtected 4,kFlagPreregisterMetadataBuffers 8,};enum {kVi…

spark的安装与使用:一键自动安装

使用shell脚本一键下载、安装、配置spark(单机版) 1. 把下面的脚本复制保存为/tmp/install_spark.sh文件 #!/bin/bash# sprak安装版本 sprak_version"2.4.0" # sprak安装目录 sprak_installDir"/opt/module" # hadoop安装路径&…

测试类运行失败:TestEngine with ID ‘junit-jupiter‘ failed to discover tests

背景:原本我的项目是可以运行的,然后我用另外一台电脑拉了下来,也是可以用的,但是很奇怪,用着用着就不能用了。报了以下错误: /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home/bin/java …

org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder 实现密码加密 验证 代码示例

BCryptPasswordEncoder 是 Spring Security 提供的用于加密和验证密码的实现类。它使用强大的 BCrypt 散列函数来存储密码的散列值,提供了一种安全的密码存储方法。以下是一个简单的示例代码,演示如何使用 BCryptPasswordEncoder 进行密码加密和验证&…

索引器【C#】

索引: 索引,索的是实例化的编号,派生的子类,第 [ N ] 个儿子。 用数组的方式访问实例。 返回的是实例的,一个属性值。 声明: this [ 索引 ] public string this[int index]{get{}set{}}pub…

idea 插件开发日志绑定问题

错误日志 Searchable options index builder completed SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/D:/gradle/caches/modules-2/files-2.1/com.jetbrains.intellij.idea/ideaIC/2021.2/b0727ceddea2b62b16825db9308e14a470198…

【QT5】QT5安装

QT5的安装 从软件开发的角度看,选择版本最新的稳定版是最佳选择,目前QT已经开发到QT6了,但是自从QT5最后一个版本QT5.15起,QT官方就不再提供离线安装包了,安装最新版本的QT除了要注册账号等麻烦的操作外,Q…

【数组和函数实战: 斗地主游戏】

目录 1. 玩法说明 2. 分析和设计 3. 代码实现 4. 游戏演示1. 玩法说明 一副54张牌,3最小,两个王最大,其实是2,和上面一样从大到小排列 2. 分析和设计 2.1 分析和设计 常量和变量设计 一副牌有54张,有牌的数值和花色,可以分别用两个数组来存储,card为卡牌表示的数值,color为…

Java数据结构之《希尔排序》题目

一、前言: 这是怀化学院的:Java数据结构中的一道难度中等的一道编程题(此方法为博主自己研究,问题基本解决,若有bug欢迎下方评论提出意见,我会第一时间改进代码,谢谢!) 后面其他编程题只要我写完…