Protobufスキーマの定義
強い型付けを実現するため、Protocol Buffers(Protobuf)の構文でメッセージとサービスを定義する方法を学習します。
「Protobufスキーマの定義」はCoddyKit上の無料gRPC & High Performance APIsレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはgRPC & High Performance APIs学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 gRPC & High Performance APIsコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
What are Protocol Buffers?
Welcome! In this lesson, we'll dive into Protocol Buffers, often called Protobuf. It's a key technology for gRPC.
- Protobuf is a language-neutral, platform-neutral, extensible mechanism for serializing structured data. Think of it as a highly efficient way to define and exchange data.
- It's like JSON or XML, but smaller, faster, and simpler.
- gRPC uses Protobuf to define the service interface and the structure of the payload messages.
The .proto File
Protobuf schemas are defined in special files ending with the .proto extension. These files act as contracts for your data.
- Every
.protofile starts with a syntax declaration, usuallysyntax = "proto3";. This tells the Protobuf compiler which version of the syntax to use. - It's crucial for forward and backward compatibility.
syntax = "proto3";
// Your Protobuf definitions go hereDefining Your First Message
In Protobuf, a message is a structured record of information. It's similar to a class in object-oriented programming or a struct in C.
You define a message using the message keyword, followed by its name and a body containing its fields.
syntax = "proto3";
message MyMessage {
// fields will go here
}Fields, Types & Numbers
Inside a message, you define fields, each with a specific data type and a unique field number.
- Data Type: Specifies the type of data (e.g.,
string,int32,bool). - Field Name: A unique identifier for the field within the message.
- Field Number: A unique, positive integer tag (from 1 to 229-1). These numbers are critical for identifying fields in the binary format and must remain stable for compatibility.
Common Scalar Data Types
Protobuf supports a range of scalar data types. Here are some of the most common ones:
int32,int64: Integer numbers.float,double: Floating-point numbers.bool: Boolean (true/false).string: UTF-8 encoded text.bytes: Raw byte sequences.
Choose the type that best fits your data to optimize storage and transmission.
Example: A Simple Person Message
Let's define a Person message with a few common fields. Notice the unique field numbers assigned to each field.
These numbers are like unique IDs for your data pieces. If you change a field's name, its number must stay the same for older systems to understand it.
syntax = "proto3";
message Person {
string name = 1;
int32 age = 2;
bool is_active = 3;
}Using Enums for Fixed Choices
Sometimes you need a field to have a value from a predefined list of options. This is where enums come in handy.
- Enums define a set of named integer constants.
- The first value in an enum must be
0, as it's the default value when a field isn't set.
syntax = "proto3";
enum UserRole {
GUEST = 0;
MEMBER = 1;
ADMIN = 2;
}Example: User Message with Role
Now, let's create a User message and include our UserRole enum as a field. This ensures that the user's role can only be one of the defined values.
It provides strong typing and prevents invalid data from being sent.
syntax = "proto3";
enum UserRole {
GUEST = 0;
MEMBER = 1;
ADMIN = 2;
}
message User {
string id = 1;
string username = 2;
UserRole role = 3;
}Nesting Messages for Structure
For more complex data, you can nest messages within other messages. This helps organize your schema and represent hierarchical data naturally.
Think of it like having an object inside another object in programming languages.
syntax = "proto3";
message UserProfile {
string email = 1;
message Address {
string street = 1;
string city = 2;
string zip_code = 3;
}
Address home_address = 2;
}Quick Check: Protobuf Basics
Consider the following Protobuf message definition:
syntax = "proto3";
message Product {
string name = 1;
int32 price_cents = 2;
bool in_stock = 3;
enum ProductCategory {
ELECTRONICS = 0;
BOOKS = 1;
CLOTHING = 2;
}
ProductCategory category = 4;
}Recap: Protobuf Schema
Great job! You've learned the fundamentals of defining Protobuf schemas:
.protoFiles: The contract for your data.- Messages: Structured data definitions, similar to classes.
- Fields: Each has a type, name, and unique field number.
- Scalar Types: Common types like
string,int32,bool. - Enums: For predefined sets of values, starting with
0. - Nesting: Organizing complex data by embedding messages.
Next, we'll see how to turn these definitions into code!
よくある質問
「Protobufスキーマの定義」レッスンは無料ですか?
はい。「Protobufスキーマの定義」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、gRPC & High Performance APIsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 gRPC & High Performance APIsコースには全4レッスンが含まれています。
「Protobufスキーマの定義」で何を学びますか?
強い型付けを実現するため、Protocol Buffers(Protobuf)の構文でメッセージとサービスを定義する方法を学習します。 ブラウザで直接実行するハンズオンコードでgRPC & High Performance APIsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
gRPC & High Performance APIsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのgRPC & High Performance APIsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Protobufスキーマの定義」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このgRPC & High Performance APIsレッスンでコードを書いて実行できますか?
はい。すべてのgRPC & High Performance APIsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Protobufスキーマの定義
- gRPCコードの生成
- シンプルなUnary gRPCサービス
- ストリーミングRPC:サーバー、クライアント、双方向