Dart-RPC:使用 Protocol Buffers 序列化而不是 JSON
Dart-RPC: Use Protocol Buffers serialisation instead of JSON
默认情况下,Dart-RPC 在服务器和客户端之间传输 objects(class 个实例)时使用 JSON 序列化。
如何使用 Protobuf (Protocol Buffers) 序列化?
是否可以使用 Accept
请求 header?
指定序列化方法(如 content-type)
这是我试过的,
我使用了以下 .proto
定义文件来表示 Person
实体:
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
使用 protoc-gen-dart plugin 为我生成 person.pb.dart
,通过 运行 命令:
protoc person.proto --dart_out=. --plugin ./protoc-gen-dart
还有一些样板 dart-rpc 代码:
import 'dart:io';
import 'package:rpc/rpc.dart';
import 'person.pb.dart';
const String _API_PREFIX = '/api';
final ApiServer _apiServer =
new ApiServer(apiPrefix: _API_PREFIX, prettyPrint: true);
main() async {
_apiServer.addApi(new Cloud());
_apiServer.enableDiscoveryApi();
HttpServer server = await HttpServer.bind(InternetAddress.ANY_IP_V4, 8080);
server.listen(_apiServer.httpRequestHandler);
}
@ApiClass(version: 'v1')
class Cloud {
@ApiMethod(method: 'GET', path: 'resource/{name}')
Person getResource(String name) {
Person p = new Person()
..id = 1
..name = name
..email = 'a@a.a';
return p; // ??? p.writeToBuffer(); ???
}
}
更新
rpc
仅支持JSON。您可以在 GitHub 存储库中创建功能请求。
默认情况下,Dart-RPC 在服务器和客户端之间传输 objects(class 个实例)时使用 JSON 序列化。
如何使用 Protobuf (Protocol Buffers) 序列化?
是否可以使用 Accept
请求 header?
这是我试过的,
我使用了以下 .proto
定义文件来表示 Person
实体:
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
使用 protoc-gen-dart plugin 为我生成 person.pb.dart
,通过 运行 命令:
protoc person.proto --dart_out=. --plugin ./protoc-gen-dart
还有一些样板 dart-rpc 代码:
import 'dart:io';
import 'package:rpc/rpc.dart';
import 'person.pb.dart';
const String _API_PREFIX = '/api';
final ApiServer _apiServer =
new ApiServer(apiPrefix: _API_PREFIX, prettyPrint: true);
main() async {
_apiServer.addApi(new Cloud());
_apiServer.enableDiscoveryApi();
HttpServer server = await HttpServer.bind(InternetAddress.ANY_IP_V4, 8080);
server.listen(_apiServer.httpRequestHandler);
}
@ApiClass(version: 'v1')
class Cloud {
@ApiMethod(method: 'GET', path: 'resource/{name}')
Person getResource(String name) {
Person p = new Person()
..id = 1
..name = name
..email = 'a@a.a';
return p; // ??? p.writeToBuffer(); ???
}
}
更新
rpc
仅支持JSON。您可以在 GitHub 存储库中创建功能请求。