一、构建API文档生成代码工作流前言

在快速迭代的现代软件开发中,API接口开发是连接前后端、服务与服务的关键枢纽。然而,传统开发流程中仍存在显著痛点:接口文档与代码实现割裂。开发者需反复在文档编写、业务编码与联调测试间切换,不仅效率低下,还易因文档过时引发协作冲突。能否将接口文档直接转化为可运行代码?能否让机器理解文档语义,自动生成高质量基础实现?大语言模型(LLM)的突破性发展,让这一设想成为可能。通过将自然语言描述的API文档(如OpenAPI/Swagger规范)输入LLM,结合精准的工程化提示设计,可引导模型生成结构清晰、符合规范的接口框架、数据模型甚至业务逻辑伪代码。

基于华为云Flexus X实例与MaaS平台的深度协同,为API文档驱动代码生成工作流提供了强大支撑:Flexus X实例以柔性算力动态匹配开发负载,通过X-Turbo加速引擎实现长时高性能输出,显著提升代码生成效率并降低30%综合用云成本;MaaS平台缝集成主流大模型及千行百业预置能力,提供开箱即用的AI开发环境,结合200万Token免费额度与全链路安全管控,实现零门槛智能化落地。二者以“弹性算力+即用智能”的双引擎架构,为企业打造安全、高效、低成本的智能开发新范式。

在这里插入图片描述

二、构建API文档生成代码工作流环境

2.1 基于FlexusX实例的Dify平台

华为云FlexusX实例提供高性价比的云服务器,按需选择资源规格、支持自动扩展,减少资源闲置,优化成本投入,并且首创大模型QoS保障,智能全域调度,算力分配长稳态运行,一直加速一直快,用于搭建Dify-LLM应用开发平台。

Dify是一个能力丰富的开源AI应用开发平台,为大型语言模型(LLM)应用的开发而设计。它巧妙地结合了后端即服务(Backend as Service)和LLMOps的理念,提供了一套易用的界面和API,加速了开发者构建可扩展的生成式AI应用的过程。

参考:华为云Flexus+DeepSeek征文 | 基于FlexusX单机一键部署社区版Dify-LLM应用开发平台教程

2.2 基于MaaS的模型API商用服务

MaaS预置服务的商用服务为企业用户提供高性能、高可用的推理API服务,支持按Token用量计费的模式。该服务适用于需要商用级稳定性、更高调用频次和专业支持的场景。

参考:华为云Flexus+DeepSeek征文 | 基于ModelArts Studio开通和使用DeepSeek-V3/R1商用服务教程

在这里插入图片描述

三、构建API文档生成代码工作流实战

3.1 配置Dify环境

输入管理员的邮箱和密码,登录基于FlexusX部署好的Dify网站

在这里插入图片描述

将MaaS平台的模型服务接入Dify,这里我们选择的是DeepSeek R1商用服务,需要记住调用说明中的接口信息和 API Key 管理中API Key,若没有可以重新创建即可

在这里插入图片描述

配置Dify模型供应商:设置 - 模型供应商 - 找到OpenAI-API-compatible供应商并单击添加模型,在添加 OpenAI-API-compatible对话框,配置相关参数,然后单击保存

在这里插入图片描述

参数 说明
模型类型 选择LLM
模型名称 填入模型名称。
API Key 填入创建的API Key。
API Endpoint URL 填入获取的MaaS服务的基础API地址,需要去掉地址尾部的“/chat/completions”后填入

3.2 配置Dify工具

Jina AI

Jina AI 是一个开源神经搜索框架,用于构建可扩展的多模态 AI 应用程序。它提供了用于索引和检索各种数据的工具,包括分割网页、获取单个页面和搜索网站的能力。它专注于简化复杂的 AI 搜索功能,并使 Web 数据处理更容易。

进入 Jina 主页 ,输入账号和密码进行登录,首次需要创建一个 API 密钥,点击首页的 API 导航就会提示创建

在这里插入图片描述

点击管理 API 密钥,就可以查看密钥和免费额度,默认剩余 10,000,000 个词元

在这里插入图片描述

访问Dify - 工具,搜索 Jina ,然后找到并安装它

在这里插入图片描述

安装成功后,点击去授权 Jina ,输入刚刚获取到的 KEY,点击保存即可

在这里插入图片描述

授权成功后,我们就可以将 Jina 节点添加到 Chatflow 或 Workflow 管道用于网页爬取和数据抓取了,提供的三个方法:

切分器:将长文本拆分成小段落,并做分词处理。
获取单页面:获取目标网址(可以是 PDF),并将其转换为适合大模型处理的 Markdown 格式。
联网搜索:针对给定的查询在互联网上进行搜索,并以适合大模型处理的 Markdown 格式返回最相关的结果。

在这里插入图片描述

3.3 创建API文档生成代码工作流

在 Dify - 工作室,创建空白应用,选择工作流,输入应用名称和图标,点击创建

在这里插入图片描述

开始节点添加4个参数用于用户输入,主要是输入 API 文档本地文件或者在线 API URL

file(单文件):API本地文档(二选一),选填
api_url(文本):API文档Url(二选一),选填
other(文本):额外说明,选填
language(下拉选项):编程语言,必填,由Java、Python等

在这里插入图片描述

language 的下拉选项添加如下,包括常用的5种编程语言

在这里插入图片描述

添加条件分支,判断条件为 api_url 不为空,用于判断是API URL 还是API 文件

在这里插入图片描述

若 api_url 不为空,则添加 Jina AI 工具的获取单页面功能节点,输入网址为 api_url

在这里插入图片描述

若 api_url 为空且文件必须存在,因为规则是二者必须选一个,则添加文档提取器节点,输入变量为上传的 API 文档文件

在这里插入图片描述

然后将二个分支都接入变量聚合器节点,添加二个变量,网址的解析结果text文档的解析结果text

在这里插入图片描述

再将结果连接到 LLM 节点,模型默认是 MaaS 通过的DeepSeek R1模型,建议将模型的Tempreture设置为0

Tempreture:核采样阀值。用于决定结果随机性,取值越高随机性越强即相同的问题得到的不同答案的可能性越高。

在这里插入图片描述

再输入系统提示词,参考如下:

# 你是一个软件工程师,帮助用户解读API文档并直接生成代码。
## 工作流程
1. 根据用户的要求解读API文档
2. 简要想用户介绍API文档中涉及到的接口
3. 根据用户的要求使用{{#1740959153996.language#}}编写测试代码

## 工作要求
1. 如果在输入的接口文档找没有找到接口,请向用户澄清。
2. 如果输入的接口文档中找到了多个接口,请向用户澄清具体是哪个接口。
3. 如果文档中涉及到了api-key或认证相关内容,可以使用用户提供加入到接口中。
4. 如果文档中提及了某些必须传入的参数和认证用的api-key,而用户没有提供,请告知用户未生成代码的具体原因,并询问用户该如何处理必需的参数。如:按照API文档的描述,在调用XX接口时,需要提供XX参数,并询问用户该如何处理?
5. 请注意API文档中描述的输入和输出参数的格式,严格按照文档中描述的格式组织代码。

## 输出格式
1. 编写测试代码
2. 解释每个输入参数和输出参数具体的含义

再输入用户提示词,参考如下:

接口文档内容如下{{#变量聚合器.output#}}。
请使用 {{#开始.language#}} 编写代码
用户要求:{{#开始.other#}}

在这里插入图片描述

最后添加结束节点,输入 LLM 的输出变量,将结果告知用户

在这里插入图片描述

编排工作流后点击右上角的运行,输入API文档URL:https://302ai.apifox.cn/api-194185107,编程语言选为 Java,额外说明可以不填

在这里插入图片描述

点击开始,等待运行完成,可以在追踪中查看运行流程,通过输入的 API URL 使用 Jina 工具解析得到文档说明数据

在这里插入图片描述

再将解析的 API 文档输入给 LLM,再由 LLM 生成代码

在这里插入图片描述

最后输出最终的结果展示给用户

根据接口文档,我将为您编写调用"Reader(网页转md格式)"接口的Java代码:

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class JinaReaderExample {
    private static final String API_KEY = "YOUR_API_KEY"; // 替换为你的API Key
    private static final String TARGET_WEBSITE = "https://302.ai"; // 要转换的网站地址

    public static void main(String[] args) {
        OkHttpClient client = new OkHttpClient();

        // 构建请求URL
        String url = "https://api.302.ai/jina/reader/" + TARGET_WEBSITE;
        
        // 创建请求
        Request request = new Request.Builder()
                .url(url)
                .addHeader("Authorization", "Bearer " + API_KEY)
                .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful()) {
                String responseBody = response.body().string();
                System.out.println("转换成功!结果:");
                System.out.println(responseBody);
            } else {
                System.out.println("请求失败,状态码: " + response.code());
                System.out.println("响应内容: " + response.body().string());
            }
        } catch (Exception e) {
            System.err.println("请求异常: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

参数说明:
1. API_KEY(必需):
- 类型:String
- 认证凭证,需要替换为实际API Key
- 获取方式:登录302.AI管理后台创建API Key

2. TARGET_WEBSITE(必需):
- 类型:String
- 要转换的网站URL地址
- 示例:"https://302.ai"

使用说明:
1. 需要添加OkHttp依赖(Maven):

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.12.0</version>
</dependency>


2. 错误处理建议:
- 401 Unauthorized:检查API Key是否正确
- 404 Not Found:验证目标网站URL是否有效
- 429 Too Many Requests:超出API调用频率限制
- 500 Server Error:服务器内部错误,建议重试

3. 响应处理:
- 成功响应(200)会返回转换后的Markdown格式内容
- 失败响应会包含错误状态码和错误信息

注意事项:
1. 请确保目标网站允许爬取,遵守robots.txt规则
2. 复杂网页可能需要调整超时设置(默认10秒)
3. 建议对目标URL进行URL编码处理特殊字符
4. 生产环境需要添加重试机制和限流控制

在这里插入图片描述

测试完成就可以发布更新到探索页面了,发布后选择运行就可以获得一个在线运行的工作流的网页!

3.4 使用API文档生成代码工作流

在探索 - API文档生成代码中开启新对话

在这里插入图片描述

这次选择上传API本地文档,这里下载的的是 墨迹天气 - MoDaas_城市ID请求V1.5-外部版本 PDF文件,选择语言为Java,点击运行即可

在这里插入图片描述

按照流程文档提取,解析API文件,生成代码

在这里插入图片描述

最后输出代码,还有一些代码解释、参数解释

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;

public class MojiWeatherAPI {

    // 需要联系墨迹天气获取的凭证信息
    private static final String TOKEN = "your_token_here";  // 替换为实际token
    private static final String PASSWORD = "your_password_here";  // 替换为实际password

    public static void main(String[] args) {
        try {
            // 1. 准备请求参数
            long timestamp = System.currentTimeMillis();
            long cityId = 2; // 北京市的cityId
            String language = "zh-CN";
            
            // 2. 生成签名key
            String rawKey = PASSWORD + timestamp + cityId;
            String key = md5(rawKey);
            
            // 3. 构建请求URL
            String url = "http://coapi.moji.com/whapi/v2/weather?"
                    + "timestamp=" + timestamp
                    + "&token=" + URLEncoder.encode(TOKEN, StandardCharsets.UTF_8)
                    + "&cityId=" + cityId
                    + "&key=" + key
                    + "&language=" + language;

            // 4. 发送GET请求
            HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
            conn.setRequestMethod("GET");
            
            // 5. 处理响应
            int responseCode = conn.getResponseCode();
            if (responseCode == 200) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                StringBuilder response = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    response.append(line);
                }
                reader.close();
                
                // 解析JSON响应(这里需要根据实际返回结构处理)
                System.out.println("API Response: " + response.toString());
                
                // 示例解析当前温度(根据文档中的current结构)
                // JSONObject json = new JSONObject(response.toString());
                // double temp = json.getJSONObject("data").getJSONObject("current").getDouble("temp");
                // System.out.println("当前温度: " + temp + "℃");
                
            } else {
                System.err.println("请求失败,HTTP状态码: " + responseCode);
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // MD5加密方法
    private static String md5(String input) throws Exception {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] digest = md.digest(input.getBytes(StandardCharsets.UTF_8));
        StringBuilder sb = new StringBuilder();
        for (byte b : digest) {
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }
}
- 设置必要参数(timestamp、cityId、token、password)。
- 生成MD5签名作为key。
- 构建请求URL。
- 发送HTTP GET请求。
- 解析响应JSON,处理错误码。
- 输出结果或错误信息。
### 参数说明:
1. **timestamp**  
   - 类型:long  
   - 必填:是  
   - 说明:当前时间戳(毫秒级)

2. **token**  
   - 类型:String  
   - 必填:是  
   - 说明:由墨迹天气提供的访问令牌

3. **cityId**  
   - 类型:long  
   - 必填:是  
   - 说明:城市唯一标识(如:2代表北京市)

4. **key**  
   - 类型:String  
   - 必填:是  
   - 说明:通过`MD5(password+timestamp+cityId)`生成的签名

5. **language**  
   - 类型:String  
   - 必填:否  
   - 说明:返回数据的语言类型(默认英文,支持zh-CN等)

### 响应参数示例(current节点):

"current": {
    "temp": 23.0,          // 当前温度(℃)
    "humidity": 92,        // 湿度(%)
    "weather": "小雨",      // 天气现象描述
    "wind_level": 1,       // 风力等级
    "uvi": 1               // 紫外线指数
}

### 使用注意事项:
1. 需要联系墨迹天气获取`token`和`password`
2. 建议使用JSON解析库(如Jackson)处理响应数据
3. 需要处理API返回的错误码(如code=1表示无效token)
4. 生产环境建议添加重试机制和超时设置
5. 注意时区问题(所有时间字段均为当地时间)

> 请将代码中的`your_token_here`和`your_password_here`替换为实际值后再运行。如果缺少必要参数,API会返回`City Id Is Illegal`等错误信息。

在这里插入图片描述

四、总结

基于Dify构建API文档驱动代码生成工作流的实践,成功打通了文档到代码的自动化链路,Dify可视化编排将文档解析、提示工程、模型调度等复杂流程简化为“拖拽式”开发很方便。通过智能解析用户提交的OpenAPI/Swagger文档,联动大模型精准生成Java/Python等接口框架代码,实测将单接口开发耗时从小时级压缩至分钟级。该方案不仅解决了文档与代码割裂的行业痛点,更显著降低了重复劳动成本,为团队构建起标准化、可复用的智能开发基座,真正实现设计即生产的敏捷转型。

华为云Flexus X提供高性能低成本算力支撑,MaaS平台实现DeepSeek R1模型开箱即用,双擎协同使代码生成工作流获得分钟级响应、30%成本优化与零调优部署的核心优势。

828 B2B企业节已经开幕,汇聚千余款华为云旗下热门数智产品,更带来满额赠、专属礼包、储值返券等重磅权益玩法,是中小企业和开发者上云的好时机,建议密切关注官方渠道,及时获取最新活动信息,采购最实惠的云产品和最新的大模型服务!

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐