pcapi/README.md
2025-07-16 14:46:24 +08:00

90 lines
2.3 KiB
Markdown

# pcapi
算力中心API服务器
## 安装须知
* 先执行sh install.sh安装升级第三方库
* 将sqlor,ahserver,apppublic,rbac,appbase库拉取下来依次安装
* 建议不要直接pip install -r requirement.txt,小麻烦较多
## 安全保证
* 使用https协议
* 使用BasicAuth传输用户密码
* 检查IP是否在允许IP集中
* 上述检查失败的请求全部返回401
## 服务方代码
### 例子功能
#### 步骤1 包装K8S功能
```
async def create_namespaced_job_v1(namespace, jobdesc):
batch_v1 = client.BatchV1Api()
f = awaitify(batch_v1.create_namespaced_job)
return await f(namespace=namespace, body=jobdesc)
```
上述代码用来包装k8s的以下功能
```
batch_v1 = client.BatchV1Api()
batch_v1.create_namespaced_job(namespace=..., nody=...)
```
#### 步骤2 让新功能在dspy脚本中可用
将下面的代码放在def init_func()函数的最后:
```
g.create_namespaced_job_v1 = create_namespaced_job_v1
```
### 功能扩充
有新功能需要扩充时,请参照上述功能操作
### 数据参数话函数
paramify(data, ns):
data是一个python的字符串,字典或数组,其中的数据有用“${name}$"形式定义的变量,此函数将data中的参数用ns字典中的值替换
此函数在dspy脚本中可用
### 后台目录协议
* 所有后台程序在wwwroot下
* wwwroot中只有一个api目录
* api目录按照api的版本创建v{版本号}目录, 版本号为整数,从“1”开始
* 每个api一个在版本目录下创建一个api名称的目录
* api代码在api名称目录的index.dspy文件中
### 接口脚本例子
```
info('test .....{params_kw=}')
data = {
"k":"${key}$",
"s":"${secretkey}$"
}
ns = paramify(data, params_kw)
return ns
```
## 请求方代码例子
### curl版本
curl --basic --user kyycloud:Kyy@123456 https://pcapi.opencomputing.cn
### dspy版本
```
# 客户方需要提供用户密码,用basic_auth_headers函数生成验证用户所需
# 的http请求的headers,并在请求是放在headers参数中
headers = basic_auth_headers('kyycloud','Kyy@123456')
hc = HttpClient()
resp = await hc.request('https://pcapi.opencomputing.cn',
method='GET',
params={
"a":"1",
"key":"87y32iuhi453u8y56",
"secretkey":"qqqqqcccccceeeee"
},
headers=headers)
info(f'{resp=}')
return resp
# bricks