Flutter OpenAPI代码生成插件openapi_code_builder的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter OpenAPI代码生成插件openapi_code_builder的使用

openapi_code_builder 是一个用于生成服务器存根和客户端库的插件,它基于OpenAPI 3.0模式文件(目前仅支持YAML格式)。以下是关于如何使用 openapi_code_builder 的详细说明,并提供了一个完整的示例demo。

使用步骤

1. 更新 pubspec.yaml

首先,在你的项目的 pubspec.yaml 文件中添加必要的依赖项:

dependencies:
  json_annotation: ^3.0.1
  openapi_base: any

dev_dependencies:
  openapi_code_builder: any
  json_serializable: ^3.3.0
  build_runner: ^1.10.0

2. 创建OpenAPI模式文件

lib 文件夹中创建一个OpenAPI模式文件,文件扩展名为 .openapi.yaml。例如,创建一个名为 testapi.openapi.yaml 的文件:

openapi: 3.0.0
info:
  version: 0.1.0
  title: Example API
  x-dart-name: TestApi

paths:
  /hello/{name}:
    parameters:
      - name: name
        in: path
        required: true
        schema:
          type: string
    get:
      summary: Say Hello World to {name}
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HelloResponse'
components:
  schemas:
    HelloResponse:
      properties:
        message:
          type: string
          description: 'The Hello World greeting ;-)'

3. 运行 build_runner

接下来,运行 build_runner 来生成Dart源文件:

flutter pub run build_runner build --delete-conflicting-outputs

4. 实现服务器和客户端

实现服务器

创建一个继承自生成的API类的实现类,并重写相应的方法。例如,创建一个 test_api_impl.dart 文件:

import 'package:openapi_base/openapi_base.dart';
import 'package:test_api/test_api.dart';

class TestApiImpl extends TestApi {
  @override
  Future<HelloNameGetResponse> helloNameGet({String name}) async {
    _logger.info('Saying hi to $name');
    return HelloNameGetResponse.response200(
        HelloResponse(message: 'Hello $name'));
  }
}

然后,创建一个服务器并绑定到端口。例如,创建一个 main_server.dart 文件:

import 'package:openapi_shelf/openapi_shelf.dart';
import 'package:test_api/test_api.dart';
import 'package:test_api_impl/test_api_impl.dart';
import 'package:logging/logging.dart';

Future<void> main() async {
  PrintAppender.setupLogging();
  _logger.fine('Starting Server ...');
  final server = OpenApiShelfServer(
    TestApiRouter(ApiEndpointProvider.static(TestApiImpl())),
  );
  await server.startServer();
}

实现客户端

创建一个客户端来调用API。例如,创建一个 main_client.dart 文件:

import 'package:logging/logging.dart';
import 'package:test_api/test_api.dart';
import 'package:http/http.dart' as http;

Future<void> main() async {
  final requestSender = HttpRequestSender(http.Client());
  final client = TestApiClient(
      Uri.parse('http://localhost:8000'),
      requestSender);
  final blubb = await client.helloNameGet(name: 'Blubb');
  blubb.map(
    on200: (response) => _logger.info('Success: ${response.body.message}'),
  );
  _logger.info('Response: $blubb');
  requestSender.dispose();
}

5. 运行示例

运行服务器

在项目根目录下运行以下命令启动服务器:

dart run bin/main_server.dart

运行客户端

在另一个终端窗口中运行以下命令启动客户端:

dart run bin/main_client.dart

更多关于Flutter OpenAPI代码生成插件openapi_code_builder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter OpenAPI代码生成插件openapi_code_builder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,我可以为你提供一个关于如何使用 openapi_code_builder 插件来生成 Flutter 代码的示例。openapi_code_builder 是一个帮助开发者从 OpenAPI 规范(通常称为 Swagger 文档)自动生成 Flutter 代码的工具。以下是一个基本的代码示例,展示了如何使用这个插件。

步骤 1: 添加依赖

首先,你需要在你的 pubspec.yaml 文件中添加 openapi_code_builder 的依赖:

dependencies:
  flutter:
    sdk: flutter
  openapi_code_builder: ^最新版本号  # 请替换为实际的最新版本号

然后运行 flutter pub get 来获取依赖。

步骤 2: 配置 OpenAPI 文件

假设你有一个 OpenAPI 规范文件 api.yaml,其内容类似于:

openapi: 3.0.0
info:
  title: 示例 API
  version: 1.0.0
paths:
  /users:
    get:
      summary: 获取用户列表
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                    name:
                      type: string

步骤 3: 生成 Flutter 代码

创建一个 Dart 脚本(例如 generate_code.dart),用于运行 openapi_code_builder 并生成代码:

import 'package:openapi_code_builder/openapi_code_builder.dart';

void main() async {
  // 读取 OpenAPI 文件
  final openApiDocument = await OpenApiDocument.fromYamlFile('path/to/your/api.yaml');

  // 配置生成选项
  final generatorOptions = GeneratorOptions(
    outputDirectory: './lib/generated',
    packageName: 'your_app_package_name', // 替换为你的 Flutter 应用的包名
  );

  // 生成代码
  await openApiDocument.generate(generatorOptions);

  print('代码生成完成!');
}

确保将 'path/to/your/api.yaml' 替换为你的 OpenAPI 文件的实际路径,并将 your_app_package_name 替换为你的 Flutter 应用的包名。

步骤 4: 运行代码生成脚本

你可以使用 Dart 的命令行工具来运行这个脚本:

dart generate_code.dart

运行后,你应该会在 lib/generated 目录下看到生成的 Flutter 代码文件。

步骤 5: 使用生成的代码

现在你可以在你的 Flutter 应用中使用生成的代码了。例如,如果生成了一个 UserService 类,你可以像这样使用它:

import 'package:your_app_package_name/generated/user_service.dart';

void fetchUsers() async {
  final service = UserService();
  try {
    final users = await service.getUsers();
    print('用户列表: $users');
  } catch (e) {
    print('获取用户列表失败: $e');
  }
}

注意事项

  1. 错误处理:在实际项目中,你需要添加更多的错误处理逻辑。
  2. 依赖管理:确保你的项目依赖是最新的,以避免潜在的兼容性问题。
  3. 自定义配置openapi_code_builder 提供了许多自定义选项,你可以根据需要进行配置。

希望这个示例能帮你更好地理解和使用 openapi_code_builder 插件!

回到顶部