Flutter API生成插件shelf_open_api_generator的使用
Flutter API生成插件shelf_open_api_generator的使用
Shelf Open Api
这个库的目的是从你的shelf控制器生成带有开放API规范的文件。 OpenApi Specification
该库正在开发中,任何帮助都欢迎。
特性
- ✅ Info (版本控制、端点和其他API信息)
- ✅ Params (仅支持字符串类型的参数)
- ✅ Requests
- ✅ Responses
- ❌ 错误响应
- ✅ 通过
$ref
重用模式 - ❌ 通过
allOf
,oneOf
,anyOf
,discriminator
实现继承和多态 - ❌
json_serializable
注解 - [-] 安全性(部分实现)
- ✅ 文档 (
summary
,description
,example
) - ✅ 标签/分组
- ❌ 通过
@Deprecated()
元注解弃用操作 - ❌ 默认值
default
安装包
要使用 shelf_open_api,你需要典型的 build_runner /代码生成设置。首先,将它们添加到你的pubspec.yaml
文件中:
# pubspec.yaml
dependencies:
shelf_open_api:
dev_dependencies:
build_runner:
shelf_open_api_generator:
使用方法
你可以在 example 文件夹中看到一些示例。
运行代码生成器,你可以使用以下命令:
<dart|flutter> pub run build_runner build
你可以在 public
文件夹中查看生成的结果!
完成!查看选项以获取更多信息/配置。 但是现在让我们来编写路由吧!
使用 OpenApiRoute
在需要定义查询类型或请求体类型的路由上。
记住,你可以为每个路由定义摘要和描述。
摘要是每个方法的第一行,并且必须只有一行,否则它将成为你的路由的描述。
JsonResponse
类可以在示例中找到。应该将其添加到 shelf_open_api 包吗?
class MessagesController {
@Route.get('/messages')
@OpenApiRoute(requestQuery: MessageFetchDto)
Future<JsonResponse<void>> fetch(Request request) async {
// 代码...
}
/// 这是一个摘要
///
/// 这是一个
/// 长描述
@Route.post('/messages')
@OpenApiRoute(requestBody: MessageCreateDto)
Future<JsonResponse<void>> create(Request request) async {
// 代码...
}
}
你也可以为你的查询或请求定义摘要、描述和示例。
class MessageCreateDto {
/// 发送消息的聊天ID
final String chatId;
/// 消息内容。
///
/// 可以输入文本和表情符号。不支持图片。
///
/// `Hi, Luigi!`
final String content;
const MessageCreateDto({
required this.chatId,
required this.content,
});
}
选项
你可以在 config 文件中找到许多其他配置参数。
targets:
$default:
builders:
shelf_open_api_generator:
options:
include_routes_in: 'lib/**_controller.dart'
info_title: 'Api'
security_schemes:
appwriteJwt:
type: http
scheme: Bearer
bearerFormat: JWT
Shelf Routing
在你的应用中有太多的控制器?这可以为你节省时间!
使用 Routing
并创建一个包含应用中所有控制器的文件!
@Routing(
varName: 'controllersRouter',
generateFor: ['**/*_controller.dart'],
)
void main() {
// ...
}
// *.g.dart
import 'package:shelf_router/shelf_router.dart';
import 'package:app/features/chats/controllers/chats_controller.dart';
import 'package:app/features/messages/controllers/messages_controller.dart';
import 'package:app/features/users/controllers/users_controller.dart';
final $controllersRouter = Router()
..mount('/v1', UsersController().router)
..mount('/v1', MessagesController().router)
..mount('/v1', ChatsController().router);
这允许你在控制器上添加 @Routes(prefix: '/v1')
来前缀所有控制器路由。
这个注解不是强制性的!
@Routes(prefix: '/v1')
class MessagesController {
// ...
}
选项
targets:
$default:
builders:
shelf_open_api_generator:shelf_routing:
generate_for:
- '**/*_api.dart'
更多关于Flutter API生成插件shelf_open_api_generator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter API生成插件shelf_open_api_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 shelf_open_api_generator
这个 Flutter API 生成插件的示例代码。这个插件可以帮助你根据 Dart 代码自动生成 OpenAPI (Swagger) 文档。
首先,你需要确保你的 pubspec.yaml
文件中已经添加了 shelf_open_api_generator
依赖。假设你已经有了一个 Dart 项目,并且想为你的 Shelf 服务器生成 OpenAPI 文档。
1. 添加依赖
在你的 pubspec.yaml
文件中添加以下依赖:
dependencies:
shelf: ^1.0.0
shelf_router: ^1.0.0
shelf_open_api: ^3.0.0
shelf_open_api_generator: ^2.0.0
2. 编写 Shelf 服务器代码
创建一个 server.dart
文件,并编写一个简单的 Shelf 服务器代码。例如:
import 'dart:io';
import 'package:shelf/shelf.dart';
import 'package:shelf_router/shelf_router.dart';
import 'package:shelf_open_api/shelf_open_api.dart';
import 'package:shelf_open_api_generator/shelf_open_api_generator.dart';
part 'routes.dart'; // 这里我们将定义路由
void main() async {
final router = Router();
// 注册路由
setupRouter(router);
// 生成 OpenAPI 文档
final openApiDocument = generateOpenApiDocument(
info: Info(title: 'My API', version: '1.0.0'),
paths: {
'/': getOperation(summary: 'Root endpoint', responses: {200: ResponseObject(description: 'OK')}),
'/hello': getOperation(
summary: 'Say hello',
operationId: 'hello',
responses: {200: ResponseObject(description: 'Hello response', content: {'application/json': {'schema': Schema.object({'message': Schema.string()})}})},
),
},
components: Components(schemas: {
'HelloResponse': Schema.object({'message': Schema.string()}),
}),
);
// 创建 OpenAPI 处理器
final openApiHandler = createOpenApiHandler(openApiDocument);
// 创建 Shelf 处理器
final handler = Pipeline().addMiddleware(logRequests()).addHandler(
Router()
..addRoute(Method.get, '/openapi.json', openApiHandler) // OpenAPI 文档路径
..addAll(router.routes),
);
final server = await HttpServer.bind(InternetAddress.anyIPv4, 8080);
print('Serving at http://${server.address.host}:${server.port}');
await server.listen(handler.handleRequest);
}
3. 定义路由
创建一个 routes.dart
文件,并定义你的路由处理逻辑:
import 'package:shelf/shelf.dart';
import 'package:shelf_router/shelf_router.dart';
void setupRouter(Router router) {
router.get('/hello', (Request request) async {
return Response.json({'message': 'Hello, World!'});
});
router.get('/', (Request request) async {
return Response.ok('Welcome to the root of my API!');
});
}
4. 运行服务器
在终端中运行以下命令来启动你的服务器:
dart run
现在,你的服务器应该正在运行,并且你可以访问 http://localhost:8080/openapi.json
来查看自动生成的 OpenAPI 文档。
总结
以上代码展示了如何使用 shelf_open_api_generator
来为你的 Shelf 服务器自动生成 OpenAPI 文档。你可以根据需要扩展和修改生成的 OpenAPI 文档和路由处理逻辑。这个插件可以大大简化 API 文档的管理工作,使你的 API 更加易于理解和使用。