Python-- flask
将 Python 代码做成 API 接口
我们可以使用 Python 的Flask
框架来创建一个简单的 API 接口。Flask
是一个轻量级的 Web 框架,易于使用和部署。
示例代码
假设你有一个简单的 Python 函数,用于计算两个数的和,以下是将其转换为 API 接口的代码:
from flask import Flask, request, jsonify
app = Flask(__name__)
# 定义一个简单的函数
def add_numbers(a, b):
return a + b
# 定义API接口
@app.route('/add', methods=['POST'])
def add():
data = request.get_json()
a = data.get('a')
b = data.get('b')
if a is None or b is None:
return jsonify({"error": "Missing 'a' or 'b' in request"}), 400
result = add_numbers(a, b)
return jsonify({"result": result})
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
代码解释
- 导入必要的库:导入
Flask
、request
和jsonify
。 - 创建 Flask 应用:
app = Flask(__name__)
。 - 定义业务函数:
add_numbers
用于计算两个数的和。 - 定义 API 接口:使用
@app.route
装饰器定义一个 POST 请求的接口/add
,接收 JSON 数据,提取a
和b
的值,调用add_numbers
函数计算结果,并返回 JSON 响应。 - 运行应用:使用
app.run
启动 Flask 应用,监听0.0.0.0:5000
。
c++ --windows.web.http windows.data.json ppltasks
在 DirectX 12 3D + Visual Studio 2022 开发中使用 API 接口
在 Visual Studio 2022 中开发 DirectX 12 应用时,我们可以使用WinINet
或C++/CX
的Windows::Web::Http
命名空间来发送 HTTP 请求。以下是使用Windows::Web::Http
的示例代码:
#include <iostream>
#include <ppltasks.h>
#include <windows.web.http.h>
#include <windows.data.json.h>
#include <collection.h>
using namespace concurrency;
using namespace Windows::Web::Http;
using namespace Windows::Data::Json;
using namespace Windows::Foundation;
using namespace Platform;
// 异步函数发送HTTP POST请求
IAsyncAction^ CallPythonAPI() {
return create_async([=]() {
try {
// 创建HttpClient对象
HttpClient^ httpClient = ref new HttpClient();
// 创建JSON对象
JsonObject^ jsonObject = ref new JsonObject();
jsonObject->SetNamedValue("a", JsonValue::CreateNumberValue(1));
jsonObject->SetNamedValue("b", JsonValue::CreateNumberValue(2));
// 将JSON对象转换为字符串
String^ jsonString = jsonObject->Stringify();
// 创建HttpStringContent对象
HttpStringContent^ content = ref new HttpStringContent(jsonString, Windows::Storage::Streams::UnicodeEncoding::Utf8, "application/json");
// 发送POST请求
Uri^ uri = ref new Uri("http://localhost:5000/add");
create_task(httpClient->PostAsync(uri, content)).then([](HttpResponseMessage^ response) {
// 检查响应状态码
response->EnsureSuccessStatusCode();
// 读取响应内容
return response->Content->ReadAsStringAsync();
}).then([](String^ responseBody) {
// 解析JSON响应
JsonObject^ resultJson;
if (JsonObject::TryParse(responseBody, &resultJson)) {
double result = resultJson->GetNamedNumber("result");
std::wcout << L"Result: " << result << std::endl;
}
});
}
catch (Exception^ ex) {
std::wcout << L"Exception: " << ex->Message->Data() << std::endl;
}
});
}
int main() {
// 使用task包装IAsyncAction并等待完成
task<void> asyncTask(CallPythonAPI());
asyncTask.wait();
return 0;
}
代码解释
- 包含必要的头文件:包含
ppltasks.h
、windows.web.http.h
等头文件。 - 定义异步函数
CallPythonAPI
:- 创建
HttpClient
对象。 - 创建 JSON 对象并设置
a
和b
的值。 - 将 JSON 对象转换为字符串,并创建
HttpStringContent
对象。 - 发送 POST 请求到 Python API 接口。
- 检查响应状态码,读取响应内容。
- 解析 JSON 响应,提取结果并输出。
- 创建
- 在
main
函数中调用异步函数:调用CallPythonAPI
并等待其完成。
调用时windows.web.http windows.data.json ppltasks需要修改的设置