Flutter API文档生成与Swagger集成插件pip_services3_swagger的使用
Flutter API 文档生成与 Swagger 集成插件 pip_services3_swagger
的使用
Swagger UI for Pip.Services in Dart #
此模块是 Pip.Services 多语言微服务工具包的一部分。
Swagger 模块提供了一个可以添加到微服务中的 Swagger UI,并且可以无缝地与现有的 REST 和可命令的 HTTP 服务集成。
该模块包含以下包:
- Build - Swagger 服务工厂
- Services - Swagger UI 服务
使用 #
在你的 pubspec.yaml
文件中添加以下依赖:
dependencies:
pip_services3_swagger: version
然后从命令行安装包:
flutter pub get
开发一个 RESTful 服务组件。例如,它可能如下所示。在 register
方法中,我们加载了服务的 Open API 规范。
你也可以在构造函数中通过设置 _swaggerEnable
属性来默认启用 Swagger。
class MyRestService extends RestService {
MyRestService() : super() {
baseRoute = 'myservice';
swaggerEnable = true;
}
FutureOr<Response> greeting(Request req) async {
var name = req.params['name'];
var response = 'Hello, ' + name.toString() + '!';
return sendResult(req, response);
}
void register() {
registerRoute(
'get',
'/greeting',
ObjectSchema(true).withRequiredProperty('name', TypeCode.String),
greeting);
registerOpenApiSpecFromFile('./src/services/myservice.yml');
}
}
Open API 规范文件应如下所示准备,可以手动准备或使用 Swagger Editor 准备。
openapi: '3.0.2'
info:
title: 'MyService'
description: 'MyService REST API'
version: '1'
paths:
/myservice/greeting:
get:
tags:
- myservice
operationId: 'greeting'
parameters:
- name: correlation_id
in: query
description: Correlation ID
required: false
schema:
type: string
- name: name
in: query
description: Name of a person
required: true
schema:
type: string
responses:
200:
description: 'Successful response'
content:
application/json:
schema:
type: 'string'
在 config.yml
文件中包含 Swagger 服务并为你的 REST 或可命令的 HTTP 服务启用 Swagger。显式添加 HttpEndpoint
允许在 REST 服务和 Swagger 服务之间共享同一个端口。
---
...
# 共享 HTTP 端点
- descriptor: "pip-services:endpoint:http:default:1.0"
connection:
protocol: http
host: localhost
port: 8080
# Swagger 服务
- descriptor: "pip-services:swagger-service:http:default:1.0"
# 我的 RESTful 服务
- descriptor: "myservice:service:rest:default:1.0"
swagger:
enable: true
最后,记得将工厂添加到你的容器中,以便它可以创建所需的组件。
...
import 'package:pip_services3_container/pip_services3_container.dart';
import 'package:pip_services3_swagger/pip_services3_swagger.dart';
class MyProcess extends ProcessContainer {
MyProcess(): super('myservice', 'MyService 微服务') {
factories.add(DefaultRpcFactory());
factories.add(DefaultSwaggerFactory());
factories.add(MyServiceFactory());
...
}
}
启动微服务并在浏览器中打开 Open API 规范页面: http://localhost:8080/greeting/swagger
然后使用链接 http://localhost:8080/swagger 打开 Swagger UI。结果应该类似于下图。
开发 #
为了开发,你需要安装以下前提条件:
- Dart SDK 2
- Visual Studio Code 或其他你喜欢的 IDE
- Docker
安装依赖:
flutter pub get
运行自动化测试:
flutter pub run test
生成 API 文档:
./docgen.ps1
在提交更改之前,运行 Docker 化构建和测试:
./build.ps1
./test.ps1
./clear.ps1
联系人 #
Dart 版本的 Pip.Services 由以下人员创建和维护:
- Sergey Seroukhov
- Danil Prisiazhnyi
文档由以下人员编写:
- Levichev Dmitry
example/main.dart
import 'dart:async';
import 'dart:io';
import 'package:pip_services3_commons/pip_services3_commons.dart';
import 'package:pip_services3_components/pip_services3_components.dart';
import 'package:pip_services3_rpc/pip_services3_rpc.dart';
import 'package:pip_services3_swagger/pip_services3_swagger.dart';
import 'logic/DummyController.dart';
import 'services/DummyCommandableHttpService.dart';
import 'services/DummyRestService.dart';
void main(List<String> args) async {
// 创建组件
var logger = ConsoleLogger();
var controller = DummyController();
var httpEndpoint = HttpEndpoint();
var restService = DummyRestService();
var httpService = DummyCommandableHttpService();
var statusService = StatusRestService();
var heartbeatService = HeartbeatRestService();
var swaggerService = SwaggerService();
var components = [
controller,
httpEndpoint,
restService,
httpService,
statusService,
heartbeatService,
swaggerService
];
// 配置组件
logger.configure(ConfigParams.fromTuples(['level', 'trace']));
httpEndpoint.configure(ConfigParams.fromTuples([
'connection.protocol',
'http',
'connection.host',
'localhost',
'connection.port',
8080
]));
restService.configure(ConfigParams.fromTuples(['swagger.enable', true]));
httpService.configure(ConfigParams.fromTuples(
['base_route', 'dummies2', 'swagger.enable', true]));
try {
// 设置引用
var references = References.fromTuples([
Descriptor('pip-services', 'logger', 'console', 'default', '1.0'),
logger,
Descriptor('pip-services', 'counters', 'log', 'default', '1.0'),
LogCounters(),
Descriptor('pip-services', 'endpoint', 'http', 'default', '1.0'),
httpEndpoint,
Descriptor(
'pip-services-dummies', 'controller', 'default', 'default', '1.0'),
controller,
Descriptor('pip-services-dummies', 'service', 'rest', 'default', '1.0'),
restService,
Descriptor('pip-services-dummies', 'service', 'commandable-http',
'default', '1.0'),
httpService,
Descriptor('pip-services', 'status-service', 'rest', 'default', '1.0'),
statusService,
Descriptor('pip-services', 'heartbeat-service', 'rest', 'default', '1.0'),
heartbeatService,
Descriptor('pip-services', 'swagger-service', 'http', 'default', '1.0'),
swaggerService
]);
Referencer.setReferences(references, components);
// 打开组件
await Opener.open(null, components);
print('Press Ctrl-C to stop the microservice...');
// 等待用户按下 ENTER 键
var keyPresed = false;
stdin.listen((List<int> event) {
keyPresed = true;
});
while (!keyPresed) {
await Future.delayed(Duration(milliseconds: 100));
}
await Closer.close(null, components);
exit(0);
} catch (ex) {
logger.error(null, ex as Exception, 'Failed to execute the microservice');
exit(1);
}
}
更多关于Flutter API文档生成与Swagger集成插件pip_services3_swagger的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter API文档生成与Swagger集成插件pip_services3_swagger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
pip_services3_swagger
是一个用于生成 Swagger API 文档的插件,它可以帮助你在 Flutter 项目中轻松生成 API 文档并与 Swagger 集成。Swagger 是一个用于描述 RESTful API 的工具,它可以生成交互式的 API 文档,并允许开发者直接在浏览器中测试 API。
安装 pip_services3_swagger
首先,你需要在 pubspec.yaml
文件中添加 pip_services3_swagger
依赖:
dependencies:
pip_services3_swagger: ^1.0.0
然后运行 flutter pub get
来安装依赖。
使用 pip_services3_swagger
生成 API 文档
以下是一个简单的示例,展示如何在 Flutter 项目中使用 pip_services3_swagger
生成 API 文档。
1. 创建一个简单的 API
首先,创建一个简单的 API 类,例如 MyApi
:
import 'package:pip_services3_commons/pip_services3_commons.dart';
import 'package:pip_services3_rpc/pip_services3_rpc.dart';
class MyApi extends RestService {
MyApi() {
baseRoute = '/api';
}
@override
void register() {
registerRoute('GET', '/hello', null, (Request request) async {
return await _hello(request);
});
}
Future<String> _hello(Request request) async {
return 'Hello, World!';
}
}
2. 集成 Swagger 插件
接下来,使用 pip_services3_swagger
插件来生成 Swagger 文档并集成到你的 API 中。
import 'package:pip_services3_swagger/pip_services3_swagger.dart';
import 'package:pip_services3_rpc/pip_services3_rpc.dart';
void main() async {
var api = MyApi();
var swaggerConfig = SwaggerConfig();
swaggerConfig.enabled = true;
swaggerConfig.route = '/swagger';
var swaggerService = SwaggerService();
swaggerService.configure(swaggerConfig);
var httpEndpoint = HttpEndpoint();
httpEndpoint.configure(ConfigParams.fromTuples([
'connection.protocol', 'http',
'connection.host', 'localhost',
'connection.port', 8080,
]));
await httpEndpoint.open(null);
api.register();
swaggerService.registerOpenApiSpec('My API', '1.0', 'This is my API', api.getRoutes());
print('Server is running on http://localhost:8080');
}
3. 运行应用
运行你的 Flutter 应用,然后你可以通过以下 URL 访问 Swagger 文档:
http://localhost:8080/swagger
在这个页面上,你可以看到自动生成的 API 文档,并且可以直接在浏览器中测试 API。
配置 Swagger
你可以通过 SwaggerConfig
类来配置 Swagger 插件,例如启用或禁用 Swagger、设置 Swagger 的路由等。
var swaggerConfig = SwaggerConfig();
swaggerConfig.enabled = true;
swaggerConfig.route = '/swagger';