90 lines
2.3 KiB
Markdown
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 |