用于处理存在于另一台服务器上的 API 请求的适配器

如何解决用于处理存在于另一台服务器上的 API 请求的适配器

所以这是场景:

  1. 我有一个服务器(比如 SERVER A),它有以下其余的 API
  • /questionnaire/{questionnaire_id}
  • /问卷/
  • /questionnaire/question/{question_id}
  • 问卷/问题/
  1. 现在我有第二个服务器(比如 SERVER B),它有一些其他的 API。
  2. 现在 SERVER B 有一个前端(比如 FRONTEND B),可以访问后端 SERVER A 和 SERVER B

要求:

  1. 我不想直接从前端 B 访问服务器 A,而是, 我想访问将验证请求的后端 SERVER B 来自 FRONTEND B 并依次点击后端 SERVER A 以获取 响应。
  2. 现在我不想在 SERVER B 上编写重复的 API 来达到 SERVER A 上的相应 API。我想要的是一个适配器 处理 URL 以“/questionnaire/”开头的所有 API 请求和 验证用户或请求,然后点击SERVER A,接收数据 并将其返回到 FRONTEND B。

那么 Django 中是否有为此内置的工具,或者是否有任何解决方法可以使其成为可能?提前致谢。

解决方法

你可以“卷曲”绕过它。您必须在 serverB 上为 api 添加处理程序,否则无法接收请求。一旦您从前端收到请求,您就可以使用 python shell 调用带有相关参数的 curl 有效地将请求转发到服务器 A。不过,后者不是一个理想的设计,您将 B 作为网关,而您希望它充当路由器。如果您希望身份验证允许 B 发出一个会话令牌,然后该令牌会随每次调用 A 一起传递。 这里有一些代码可以为您提供上下文

import os
import subprocess    
....
        
        l_strDomain = get_domain_name()
        
        
        l_cmd = 'curl --header "Content-Type: application/json"'+\
                    ' --request POST'+\
                    ' --data \'json data here if needed'+\
                    ' http://ServerA/Api/'
        
        p1 = subprocess.Popen(l_cmd,shell=True,stdout=subprocess.PIPE,encoding='utf-8').stdout
        output = p1.read()
        p1.close();
        
        try:
            l_data = simplejson.loads(output)
        except Exception as e:
            ..do errro handling
,

我们可以使用服务器 A 和服务器 B 之间的 Api 密钥身份验证来实现这一点。

因此,当您收到来自用户(来自前端 B)到服务器 B 的请求时。 服务器 B 对用户进行身份验证后,您可以有一个中间件,使用 python 的 requests 模块向服务器 A 发送请求。

这个从服务器 B 发送到服务器 B 的请求将进行 API 密钥认证。

从服务器 A 得到响应后,您可以将其返回给前端。

  1. Django Rest framework Api key package

希望这将有助于解决这一挑战。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?