当前位置: 首页 > 知识库问答 >
问题:

[Android][改造]使用拦截器调用不同的 API

阎渝
2023-03-14

我正在做一个Android项目,该项目使用翻新来处理网络呼叫。我很难找出一个用例。

我有一个API (api1 ),它已经被实现,并被多个地方调用。现在,我需要在调用api1之前调用一个新的API (api2)。

做这件事的最好方法是什么?

我可以为此使用拦截器吗?拦截器是处理这个用例的最佳方式吗?

public class MyApi2Interceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {

    // original request
    Request request = chain.request();

    val api2Response = api2.execute()

    if (api2Response.code() == 200) {
        return chain.proceed(request);
    } else {
        return null;
    }
  }
}

或者

fun suspend callApi1() {
  return api2.execute()
         .map { api2Response -> 
            if (api2Response.code() == 200) api1.execute()
            else return null
         }
}

我个人喜欢拦截器方法,我觉得它很干净,但不确定拦截器是否用于这个目的。此外,我应该使用哪些拦截器< code>addInterceptor或< code > addNetwrokInterceptor (我想在我的情况下,我可以将它们添加到任何一个拦截器中?)

我实际上还没有在我的项目中尝试过,我不确定在interceptor中执行不同的api是否真的可行。

请让我知道你对此的想法。提前感谢。

共有1个答案

常鸿朗
2023-03-14

第二种方法更有利,因为使用拦截器会掩盖拦截器内部的逻辑,并且没有其他人知道它。此外,通常为单个服务创建改造实例,此逻辑也应在业务组件中处理,因为 API 是数据层。

 类似资料:
  • 我以为这些最新版本应该是兼容的。有一条推文;https://twitter.com/JakeWharton/status/553066921675857922和Retrofit 1.9的更新日志也提到了它。 然而,当我尝试这个: 还是不行。setClient方法抱怨不兼容的客户端对象; 我错过了什么?我还看到OkHttpClient没有实现客户端接口。 我现在使用这种方法;https://medi

  • 我根据JBoss文档创建了一个拦截器。 为了测试拦截器,我把: 现在,我想使用WeldJUnit4Runner类在单元测试中测试这个拦截器。 现在的预期产出当然是 但结果却是 主要问题是,如果我在测试中注入bean,这也是正确的:我调用的bean的第一个方法被拦截,但是如果这个方法调用另一个方法,拦截器就不会被调用。 任何想法都非常感谢! 我只是按照@adrobisch的建议修改了我的代码,效果如

  • 问题内容: 我正在使用Java EE 6和Jboss AS7.1,并尝试使用拦截器绑定(来自jboss网站的示例)。 我有一个InterceptorBinding注解: 拦截器: 还有一个豆: 但是拦截器没有被称为。。。 在编写此代码时将调用拦截器: 谢谢你的帮助。 问题答案: 您是否按照参考示例中的说明启用了拦截器? 缺省情况下,bean档案没有通过拦截器绑定绑定的已启用拦截器。必须通过将侦听器

  • 问题内容: 我创建了一个RestEASY拦截器,以允许我在Web服务调用完成后在HTTP响应上设置标头值。我的代码看起来像这样… 但是,当我调用服务时,永远不会调用拦截器。我看到webservice调用成功完成,但是拦截器中的任何代码都没有执行过。除了注册拦截器,我还需要做些其他事情吗?是否必须在其他任何地方声明?是否需要包含任何特殊的web.xml参数? 问题答案: 您必须在web.xml的re

  • 我们的团队决定采用改型2.0,我正在做一些初步的研究。我是这个图书馆的新手。 我想知道如何使用在我们的Android应用程序中通过改装2.0添加自定义标题。有很多教程介绍如何使用在翻新版1.X中添加标头,但由于API在最新版本中发生了很大变化,我不知道如何在新版本中适应这些方法。此外,改装尚未更新其新文档。 例如,在以下代码中,我应该如何实现类来添加额外的头?此外,未记录的对象究竟是什么?何时调用

  • 问题内容: 我想要一个在中运行的应用程序来进行由代码处理的调用。 理想的方法是仅拦截呼叫(简单,只需使用)并“返回”一些数据。 但是,除了使用调用函数外,我没有找到“返回”对的响应的方法。 这对我来说不起作用,因为该应用程序是我无法控制的嵌入式应用程序。就HTML / javascript应用程序而言,它只是进行调用并接收一些数据。 有什么想法吗? 问题答案: 最后,我还是使用了问题中描述的方法。

  • 问题内容: 我试图在AngularJS中制作一个拦截器。我是AngularJS的新手,并找到了一些Interceptor的示例,但无法使其正常工作。 这里有我的app.js文件,其中包含所有相关代码。我还有一个控制器,该控制器调用REST api并返回JSONP。 首先,我声明模块,然后进行配置(定义拦截器)。现在它应该捕获所有请求并将其输出到控制台… 用app.factory创建拦截器是否错误?

  • 1. 前言 拦截器这个名词定义的非常形象,就像导弹要攻击目标的时候,可能会被先进的反导系统拦截,此处的反导系统就是一种拦截器。 我们开发的应用,对外暴露的是控制器中定义的 API 方法,我们可以在 API 方法的外围放置拦截器,所有对 API 的访问都可以通过拦截器进行过滤。 OK,那么这样的拦截有什么意义吗,其实已经很明显了,反导系统可以保护目标的安全并识别对目标的攻击行为。同理,拦截器可以跟踪