Working with other API specs

Protobuf Integration

​
Overview

Taxi can enhance Protocol Buffer definitions with semantic meaning, enabling:

  • Semantic typing for protobuf messages and fields
  • Integration with message streaming systems
  • Consistent type definitions across protobuf and other formats

Semantic Enhancement

While Protocol Buffers describe message structure, Taxi adds semantic meaning to enable better data discovery and integration across systems.

​
Adding Taxi to Protobuf

​
Basic Setup

  1. First, create the Taxi extension definition in your protobuf project:
// taxi/dataType.proto
import "google/protobuf/descriptor.proto";

package taxi;

extend google.protobuf.FieldOptions {
  optional string dataType = 50002;
}
  1. Then use the extension to add semantic types:
import "taxi/dataType.proto";

message Order {
  // Add semantic type for customer name
  optional string customer_name = 1 [(taxi.dataType)="acme.CustomerName"];
  
  // Add semantic type for order ID
  optional int32 order_id = 2 [(taxi.dataType)="acme.OrderId"];
}

​
Field Type Mapping

Taxi automatically maps protobuf field types to semantic types:

message Customer {
  // Maps to String-based semantic type
  optional string name = 1 [(taxi.dataType)="acme.CustomerName"];
  
  // Maps to Int-based semantic type
  optional int32 age = 2 [(taxi.dataType)="acme.CustomerAge"];
  
  // Maps to array type
  repeated string tags = 3 [(taxi.dataType)="acme.Tag"];
}

​
Generated Taxi Models

When Taxi processes a protobuf definition, it generates corresponding Taxi models:

@lang.taxi.formats.ProtobufMessage(
  packageName = "acme.proto",
  messageName = "Customer"
)
model Customer {
   @lang.taxi.formats.ProtobufField(tag = 1, protoType = "string") 
   name: CustomerName?
   
   @lang.taxi.formats.ProtobufField(tag = 2, protoType = "int32")
   age: CustomerAge?
   
   @lang.taxi.formats.ProtobufField(tag = 3, protoType = "string")
   tags: Tag[]
}

Reccomendation: Add taxi types to Protobuf schemas when possible

Previous
Avro
Next
SOAP