编辑
2025-02-20
运维
00
请注意,本文编写于 71 天前,最后修改于 71 天前,其中某些信息可能已经过时。

目录

不同的语言
RESTfulAPI
如何使用?
 确认文档
如何鉴权
调用接口
部署

计算机世界也有自己的巴别塔

这篇文章是用于公司内向大家介绍我的工作是如何完成的

不同的语言

在计算机世界,不同的语言通常都有自己不同的特性。今天所说的RestfulAPI 是一个 web 服务器中的概念。我相信大家都知道一个现代网页通常会分为前端和后端。

image.png

在前端一般的架构就是 CSS HTML JS 这三块,其他的无非就是这三种语言的衍生框架。但是作为提供数据的后端,根据一般项目的大小和轻重,我们会使用不同的语言去承载。像 b 站、字节、腾讯、百度使用的是 go 语言,而像小红书、pdd、快手等公司使用的就是 java。

前端和不同后端对接的时候往往需要考虑的会比较多,因为不同的后端往前传过来的数据格式都不一样,这非常的耗时。曾经因为人类建造巴别塔神惩罚后端使用不同的语言,但是在之后为了统一这种混乱的情况。大家寻思出了一个统一规范:

RESTfulAPI

那简单介绍一下这个规范,就是使用一套统一的规则在前后端进行数据交互。

这种风格也并不局限 web 现在的很多业务系统之间也会开放 API 接口,他们大多也都遵守这种风格。但是因为这不是一个规则,也没有人审核。所以其实大家在风格上都有自己的“发挥”。

image.png

具体的定义感兴趣可以去看一下链接:好RESTful API的设计原则

如何使用?

一个 RESTful API 请求通常由三个部分组成,访问的 URL、请求头、请求体

钉钉token鉴权

接下来主要还是通过一个日常的需求进行入手:如何将数据库中的人员同步到某个开放 OpenAPI 的系统中?

 确认文档

既然想要同步人员,那我们就需要对对接系统的 openapi 接口文档进行查阅,我们以 ISC 为例子。打开 ISC 的 openAPI 接口文档

导航至API概览相关文档确定是否存在人员增删改查接口定义。

image.png

OK 调研确认可以满足我们的需求,那我们就可以开始着手进行准备了。

但是还没到写代码的时候我们需要再去看一下我们的要如何有资格调用接口,也就是鉴权。

如何鉴权

你需要告诉系统你是有权力调用接口的,具体授权不演示了,我们主要聚焦在如何进行鉴权。

协议概述 我们可以通过这篇文档进行鉴权实现,他们提供了 java 的 JDK,但是 Python 的没有,那我们就需要理解后自己实现了。

python
def GetSignatureAndHeader(self,url) ->dict: """ ISC Header加密算法实现 返回加密headers """ Message = "POST\n*/*\napplication/json\nx-ca-key:23067840\n" + url secret = self.config["secret"] print(secret) temp = hmac.new(secret.encode(), Message.encode(), digestmod=hashlib.sha256) Signature = base64.b64encode(temp.digest()).decode() headers = { 'Accept': '*/*', 'X-Ca-Signature-Headers': 'x-ca-key', 'X-Ca-Signature': Signature, 'X-Ca-Key': '23067840', 'Content-Type': 'application/json' } return headers

作为对比的 dingding 鉴权、OA 鉴权

image.png

image.png

这里就要提到这个 致远OA 的文档,可以导航到 OA 关于鉴权 token 获取的这一块OA的API概述 太混乱了

调用接口

ISC 平台的鉴权其实是算非常复杂的例子了,在进行复杂的鉴权之后就是正是调用接口,如何调用?我们其实可以在早期借用一些工具进行快速的测试。但是得益于 ISC 平台很先进,可以直接进行测试。

现在可以先寻思一下,如何才能新建一个人员呢?当然还是从文档入手:新建人员V2

新建人员我们其他的内容都知道应该怎么填入,这个所属组织标识要怎么获取?

我们可以往上再查一级资源信息获取流程,得知可以通过获取根组织 - > 获取组织信息

powershell
{ "personName": "person0", "gender": "1", "orgIndexCode": "", "birthday": "1990-01-01", "phoneNo": "13000110011", "email": "person1@person.com", "certificateType": "111", "certificateNo": "11001001001100110011", "jobNo": "111111" }

最后可以看一下我们代码的实现,我们是从数据库中获取了没有 iscID 的人员信息并批量新建,新建完成后回写 iscID

部署

部署就是最后的问题了,一般我配置的工具应用和服务都会进行 Docker 打包 这就是另外的话题了。