Dart-RPC:使用Protocol Buffers序列化而不是JSON

时间:2015-08-24 05:44:25

标签: json dart protocol-buffers dart-rpc

默认情况下,Dart-RPC在服务器和客户端之间传输对象(类实例)时使用JSON序列化。

如何使用Protobuf (Protocol Buffers)序列化代替? 是否可以使用Accept请求标头指定序列化方法(如内容类型)?

这是我尝试过的,

我使用了以下代表.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(); ???
  }
}

更新

打开功能请求:https://github.com/dart-lang/rpc/issues/62

1 个答案:

答案 0 :(得分:2)

rpc仅支持JSON。您可以在GitHub存储库中创建功能请求。