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

干净的架构:在哪里进行API调用

干净的架构(Clean Architecture)是一种软件设计哲学,它强调将系统分层,使得业务逻辑与外部因素(如数据库、框架、用户界面等)分离。这种架构的核心思想是依赖倒置原则(Dependency Inversion Principle),即高层组件不应该依赖于底层组件,它们都应该依赖于抽象。

API调用的位置

在干净的架构中,API调用通常发生在以下几个层次:

  1. 接口适配器层(Adapter Layer):这一层负责将外部请求转换为内部系统可以理解的格式,并将内部系统的响应转换为外部可以理解的格式。例如,RESTful API的控制器通常位于这一层。
  2. 应用服务层(Application Service Layer):这一层包含业务逻辑,但不直接与数据库或其他外部系统交互。它调用领域层的服务来完成业务逻辑,并通过接口适配器层与外部世界通信。
  3. 领域层(Domain Layer):这一层包含业务对象和业务规则。领域服务(Domain Services)可能会调用基础设施层的服务来进行某些操作,如API调用。
  4. 基础设施层(Infrastructure Layer):这一层负责与外部系统(如数据库、第三方API等)的交互。它提供了领域层所需的抽象,使得领域层不直接依赖于具体的实现。

优势

  • 可测试性:由于各层之间的依赖关系被明确管理,可以更容易地进行单元测试和集成测试。
  • 可维护性:业务逻辑与外部因素分离,使得代码更易于理解和维护。
  • 可扩展性:系统更容易适应变化,因为更改通常只影响相关的层次。

类型

  • 同步API调用:客户端发送请求后等待服务器响应。
  • 异步API调用:客户端发送请求后不等待立即响应,可以通过回调、事件或消息队列等方式接收响应。

应用场景

  • 微服务架构:每个微服务可以有自己的API接口,通过干净的架构设计,可以确保服务之间的解耦。
  • 企业应用:大型企业应用通常需要与多个外部系统交互,干净的架构可以帮助管理这些交互。

遇到的问题及解决方法

问题:API调用失败

  • 原因:可能是网络问题、API服务端问题、请求参数错误等。
  • 解决方法
    • 检查网络连接。
    • 查看API服务端的日志。
    • 校验请求参数是否正确。
    • 实现重试机制和错误处理逻辑。

问题:API响应时间过长

  • 原因:可能是API服务端处理缓慢、网络延迟等。
  • 解决方法
    • 优化API服务端的性能。
    • 使用缓存减少响应时间。
    • 考虑使用异步调用或消息队列。

示例代码

以下是一个简单的Python示例,展示如何在接口适配器层进行API调用:

代码语言:txt
复制
import requests

def get_user_data(user_id):
    url = f"https://api.example.com/users/{user_id}"
    response = requests.get(url)
    if response.status_code == 200:
        return response.json()
    else:
        raise Exception(f"Failed to get user data: {response.status_code}")

# 调用示例
try:
    user_data = get_user_data(123)
    print(user_data)
except Exception as e:
    print(e)

参考链接

通过以上信息,您可以更好地理解在干净的架构中API调用的位置、优势、类型、应用场景以及可能遇到的问题和解决方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用 Spring Cloud Gateway 进行微服务架构的 API 网关实践

随着微服务架构的流行,API网关成为了微服务架构中不可或缺的一部分。API网关不仅仅是一个简单的路由器,而且还有许多其他的功能,例如负载均衡,安全性和监控等。...Spring Cloud Gateway是一个轻量级的API网关,它是Spring Cloud生态系统中的一个组件,可以帮助开发人员快速构建高效的微服务架构。...现在,我们可以通过发送HTTP请求来测试API网关。例如,要调用用户服务,我们可以向http://localhost:8080/users发送GET请求。...同样,要调用订单服务,我们可以向http://localhost:8080/orders发送GET请求。...进一步的配置Spring Cloud Gateway还提供了许多其他的配置选项,例如路由过滤器,负载均衡和安全性等。下面是一些例子:使用路由过滤器可以使用路由过滤器对传入和传出请求进行修改和验证。

1.4K131

认证鉴权与API权限控制在微服务架构中的设计与实现(一)

引言: 本文系《认证鉴权与API权限控制在微服务架构中的设计与实现》系列的第一篇,本系列预计四篇文章讲解微服务下的认证鉴权与API权限控制的实现。 1....尤其当访问来源不只是浏览器,还包括其他服务的调用时,单体应用架构下的鉴权方式就不是特别合适了。在微服务架构下,要考虑外部应用接入的场景、用户--服务的鉴权、服务--服务的鉴权等多种鉴权场景。...技术方案 这主要包括两方面需求:其一是认证与鉴权,对于请求的用户身份的授权以及合法性鉴权;其二是API级别的操作权限控制,这个在第一点之后,当鉴定完用户身份合法之后,对于该用户的某个具体请求是否具有该操作执行权限进行校验...总结 本文是《认证鉴权与API权限控制在微服务架构中的设计与实现》系列文章的总述,从遇到的问题着手,介绍了项目的背景。通过调研现有的技术,并结合当前项目的实际,确定了技术选型。...最后对于系统的最终的实现进行展示。后面将从实现的细节,讲解本系统的实现。敬请期待后续文章。 ---- 参考 理解OAuth 2.0 微服务API级权限的技术架构 微服务架构下的安全认证与鉴权

3.3K60
  • 认证鉴权与API权限控制在微服务架构中的设计与实现(四)

    引言: 本文系《认证鉴权与API权限控制在微服务架构中的设计与实现》系列的完结篇,前面三篇已经将认证鉴权与API权限控制的流程和主要细节讲解完。...前文回顾 首先还是照例对前文进行回顾。在第一篇 认证鉴权与API权限控制在微服务架构中的设计与实现(一)介绍了该项目的背景以及技术调研与最后选型。...第三篇认证鉴权与API权限控制在微服务架构中的设计与实现(三)先介绍了资源服务器配置,以及其中涉及的配置类,后面重点讲解了token以及API级别的鉴权。...为了适配当前新的架构,采取的方案就是对这些遗留服务的操作API,在Auth服务进行API级别的操作权限鉴定。...权限控制在微服务架构中的设计与实现(一) 认证鉴权与API权限控制在微服务架构中的设计与实现(二) 认证鉴权与API权限控制在微服务架构中的设计与实现(三)

    1.8K80

    在项目中是如何进行API测试的?

    API是指操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的API使操作系统执行应用程序的命令。在日常生活中,我们经常通过API与应用程序交互,但没有思考过交互背后的后端逻辑流程。...例如,假设正在开发一个电子商务网站,如果想增加一个支付模块,不必从头开始编写代码,只需与微信支付或支付宝支付的 API 集成并调用它们的API,就能实现付款。...这个过程与标准应用程序中的用户身份验证相似,在标准应用程序中,用户需要通过有效的凭证来登录和使用应用程序。在进行 API 功能测试时,测试字段验证或输入数据验证非常重要。...如果有实际的界面可用,那么可以在界面前端进行字段验证,确保用户无法输入无效的字段值。...(3)PoC在筛选出可用的测试工具后,还要对其进行PoC验证。可以选择典型的测试场景进行实现测试并展示调查结果,最终确定要使用的测试工具。在具体实施阶段,我们需要完成如下内容。(1)启动准备。

    8620

    ButterCMS架构:完成数百万次调用的关键任务API

    停机时间是致命的 客户的web站点在发送request/response过程中,会产生对ButterCMS的API调用来获取页面内容。对ButterCMS的API请求失败,他们的页面可能不会呈现。...如果API宕机了,我们客户的网站就会和我们一起停机。 这是我们在早期学到的严重一课。不可靠的服务器托管导致频繁的间歇性中断和性能下降,这会使客户很失望。...通过Fastly的CDN来提供API响应,这意味着客户网站的访客,无论在何处都可以获得快速的加载次数。 消除单点故障 在ButterCMS的早期,处理两个独立的DNS事件令人身心疲惫。...经验告诉我们在整个架构中注意消除任何一个单点故障。 对于DNS服务器,使用来自不同DNS提供商的不同域名服务器。...除了通过 Fastly缓存API,也使用Memcached在应用层缓存API。这为防止数据库或者服务器中断提供了一个额外缓存。

    1.7K60

    认证鉴权与API权限控制在微服务架构中的设计与实现(三)

    引言: 本文系《认证鉴权与API权限控制在微服务架构中的设计与实现》系列的第三篇,本文重点讲解token以及API级别的鉴权。本文对涉及到的大部分代码进行了分析,欢迎订阅本系列文章。 1....前文回顾 在开始讲解这一篇文章之前,先对之前两篇文章进行回忆下。在第一篇 《认证鉴权与API权限控制在微服务架构中的设计与实现(一)》介绍了该项目的背景以及技术调研与最后选型。...当然我们在构建的时候可能需要一些配置,当我们调用HttpSecurity对象的方法时,实际上就是在进行配置。...--- 参考 微服务API级权限的技术架构 spring-security-oauth Spring-Security Docs 相关阅读 认证鉴权与API权限控制在微服务架构中的设计与实现(一) 认证鉴权与...API权限控制在微服务架构中的设计与实现(二)

    2.6K40

    AI Agent 中自然语言模型与代码模型在 API 调用中的深度协作

    在 AI Agent 进行 API 调用的复杂流程里,自然语言模型与代码模型的协同合作是实现高效、精准交互的核心要素。...同时,该模型会严格确认数据(权限)策略,确保 API 调用在权限允许的范围内进行,有效规避因权限问题导致的调用失败或数据泄露风险。...同时,代码模型生成的内容也支持自助运行编译。这意味着在一些自动化场景中,无需人工干预,系统可以直接根据代码模型生成的代码进行编译和执行 API 调用。...同时,该模型会严格确认数据(权限)策略,确保 API 调用在权限允许的范围内进行,有效规避因权限问题导致的调用失败或数据泄露风险。...同时,代码模型生成的内容也支持自助运行编译。这意味着在一些自动化场景中,无需人工干预,系统可以直接根据代码模型生成的代码进行编译和执行 API 调用。

    16410

    有道翻译API接口的服务开通与使用Python进行接口调用实例演示,有道智云·AI开放平台

    有道翻译 API 接口的服务开通与使用 Python 进行接口调用实例演示 第一章:服务开通 ① 有道智云·AI开放平台【注册】 ② 创建应用,获取【应用密钥和id】 ③ 创建实例,绑定应用 ④ 官方帮助文档...第二章:Python 调用接口实例演示 ① 源码展示 ② 要点讲解 ③ 效果展示 先来张效果图,然后在来给大家展示我的接口调用过程。...第一章:服务开通 我们在官方注册,获取我们后续需要的【应用密钥】和【应用id】。 ① 有道智云·AI开放平台【注册】 有道 api 接口调用官方网站:有道智云 进去注册个账号。...② 创建应用,获取【应用密钥和id】 创建应用获取应用密钥(API Key) 然后就可以看到应用密钥和应用 id 了,这两个是我们调用它的 api 所需要的。...④ 官方帮助文档 有道 api 接口调用:官方帮助文档 有道老平台 第二章:Python 调用接口实例演示 ① 源码展示 import requests import time import

    3.3K20

    Camera系统 | OpenCamera在camx架构中的调用

    : 通过一个JumpTableHAL3类型的对象pHAL3来分发(dispatch)或者说跳转到实际的实现中 g_jumpTableHAL3描述的跳转关系在 \vendor\qcom\proprietary...m_ChiAppCallback进行调用,根据上一篇的初步理解,CHI模块应该是与Camx对接的,厂商自定义的代码,这里和App扯上关系不太明白是为什么,并且还是一个callback。...: 深入理解Android相机体系结构之六_xiaozi63的博客-CSDN博客_深入理解android相机体系结构 “在HAL3Module构造方法中会去通过dlopen方法加载com.qti.chi.override.so...,看了上下几个函数都需要GetInstance来获取实例,看来这个ExtensionModule的对象是一个单例 ExtendOpen的调用位置在: \vendor\qcom\proprietary...\chi-cdk\core\chiframework\chxextensionmodule.cpp 看上去做了很多设置,没有像tv一样去和V4L2进行交互 接下来,一路返回直至 \vendor

    2.1K42

    认证鉴权与API权限控制在微服务架构中的设计与实现(二)

    引言: 本文系《认证鉴权与API权限控制在微服务架构中的设计与实现》系列的第二篇,本文重点讲解用户身份的认证与token发放的具体实现。...系统概览 在上一篇 《认证鉴权与API权限控制在微服务架构中的设计与实现(一)》介绍了该项目的背景以及技术调研与最后选型,并且对于最终实现的endpoint执行结果进行展示。...对系统架构虽然有提到,但是并未列出详细流程图。在笔者的应用场景中,Auth系统与网关进行结合。在网关出配置相应的端点信息,如登录系统申请token授权,校验check_token等端点。...如果需要对该请求进行校验,会将该请求的相关验证信息截取,以及API权限校验所需的上下文信息(笔者项目对于一些操作进行权限前置验证,下一篇章会讲到),调用Auth系统,校验成功后进行路由转发。 ?...Docs 相关阅读 认证鉴权与API权限控制在微服务架构中的设计与实现(一)

    1.7K40

    AngularJS与服务器端MVC比较

    首先分离关注是架构设计的一个基本原则,多层架构中:数据存储 服务层 API层和表现层各层之间应该最小依赖,服务层只需要知道在哪里存储数据,API只需要知道哪个服务被调用,而表现层主要是通过REST和API...多层之间只能单向依赖,比如API不能知道是谁调用它,它不能依赖于表现层。...(可见:干净的架构) 在真实情况下各层情况比较复杂,但是分离关注在随着机器和设备(laptop, mobile, tablet, desktop)增加越发重要,后端应该只提供业务逻辑和数据。...API调用,并以简单的JSON格式返回,服务器端负载降低了。...会制约前端开发者在美工和创意方面的发挥。 下图是一张基于RESTful微服务和客户端MVC和服务器端MVC的架构图: ?

    2K40

    Python 爬虫篇 - 调用有道翻译api接口翻译外文网站的整篇西班牙文实战演示。爬取西班牙语文章调用有道翻译接口进行整篇翻译

    Python 调用有道翻译 api 接口翻译整篇西班牙文实战演示 第一章:翻译效果展示 ① 翻译文章示例一【阿尔卡拉门的无海摩纳哥:“不到4万欧元,你就不能在这里租任何东西。”】...第二章:实现 ① 文章结构分析 我们可以看到文章标题是在 class="ue-l-article__header-content" 的 div 下的 h1 里的内容。 ?...正文内容在 class="ue-l-article__body ue-c-article__body" 的 div 下的 p 元素里。 ?...实现过程,还有有道 api 的配置过程可以看我的这篇文章: Python 技术篇-有道翻译api接口调用详细讲解、实战演示,有道智云·AI开放平台 import requests import time.../api' # 有道api地址 input_text = "" # 翻译文本生成sign前进行的处理 # 当文本长度小于等于20时,取文本 if(len(translate_text

    1.5K20

    只需使用VS Code的REST客户端插件即可进行API调用

    在过去,为了在连接 UI 以接受数据之前测试 REST API,通常必须通过终端的命令行查询 API,或者使用像 Insomnia 或 Postman 这样的 GUI(我在之前的博客中对它们进行了比较)...安装完成后,我们可以继续进行设置。...测试一下:基本操作 这是很酷的部分:在我的经验中,这个小小的 REST Client 插件能够做的事情和 Postman 等更复杂的 API 客户端一样多。...下面,我将向你展示如何进行每一种类型的基本 CRUD 操作,再加上如何像 JWT 令牌一样进行需要认证的 API 调用,使用我在本地运行的 MERN 用户注册应用来指向调用。...POST 示例 我将介绍的第一个示例是 REST Client 的 POST,因为用户在我的应用程序中必须先注册才能进行其他任何操作(毕竟,这只是一个登录服务)。

    8.6K20

    C++核心准则T.69:在模板内部,不要进行不受限制的非成员函数调用

    ,不要进行不受限制的非成员函数调用,除非你希望它成为一个定制点 Reason(原因) Provide only intended flexibility....存在三种主要的方式让调用代码定制模板。...如果你想用依赖模板类型参数的值t调用你自己的帮助函数helper(t),将它放入::detail命名空间并用detail::helper(t)对调用进行限定;如果一个帮助函数处于t的类型可以被触发的命名空间...,不受限的调用会成为一个定制点;这会引起意外调用非约束函数模板等问题。...在模板同一个命名空间中,如果存在一个同名非成员函数,标记模板中针对传递受影响类型变量的非成员函数的不受限调用。

    1.1K10

    认证鉴权与API权限控制在微服务架构中的设计与实现:升级

    概述 在之前的系列文章认证鉴权与API权限控制在微服务架构中的设计与实现中,我们有四篇文章讲解了微服务下的认证鉴权与API权限控制的实现。...密码匹配(matches):用户登录时,密码匹配阶段并没有进行密码解密(因为密码经过Hash处理,是不可逆的),而是使用相同的算法把用户输入的密码进行hash处理,得到密码的hash值,然后将其与从数据库中查询到的密码...关于怎么初始化密码呢,和注册用户的时候怎么给密码加密,我们可以在初始化密码时调用如下的方法: 1SCryptPasswordEncoder sCryptPasswordEncoder = new SCryptPasswordEncoder...结果验证 经过如上的升级改造,我们将验证如下的API端点: password模式获取token:/oauth/token?...小结 OAuth鉴权服务是微服务架构中的一个基础服务,项目公开之后得到了好多同学的关注,好多同学在加入QQ群之后也提出了自己关于这方面的疑惑或者建议,一起讨论和解决疑惑的地方。

    1K20

    在调用API之前,你需要理解的LSTM工作原理

    LSTM 是目前应用非常广泛的模型,我们使用 TensorFlow 或 PyTorch 等深度学习库调用它甚至都不需要了解它的运算过程,希望本文能为各位读者进行预习或复习 LSTM 提供一定的帮助。...虽然上图并没有表明详细和真实的 LSTM 架构,但它能给我们一个直观的理解。此外,正因为 LSTM 这种属性,它不会对整个信息进行统一的运算,而是稍微修改一些局部的信息。...因此我们需要把他「输入」到我们的新闻中作进一步分析。 但是现在所有这些碎片信息都不够在主流媒体上进行报道,因此在一段时间后,我们需要总结这些信息并「输出」对应的结果给我们的读者。...我们使用 Keras,它是一个用于神经网络的高阶 API,并在 TensorFlow 或 Theano 之上工作。因此在进入代码之前,请确保你已安装运行正常的 Keras。好的,我们开始生成文本!...我们接着把 X_modified 中的值在 0 到 1 之间进行缩放,并且在 Y_modified 中对真值进行独热编码(one hot encode)。

    1.5K40
    领券