ホームページ >バックエンド開発 >Golang >Protobuf 3 フィールドを必須にする方法は?

Protobuf 3 フィールドを必須にする方法は?

WBOY
WBOY転載
2024-02-09 08:10:28719ブラウズ

如何使 Protobuf 3 字段成为必填字段?

Protobuf 3 は効率的なデータシリアル化形式ですが、使用中に特定のフィールドを必須にする必要がある場合があります。では、Protobuf 3 フィールドを必須にするにはどうすればよいでしょうか?この記事では、PHP エディターの Strawberry が、Protobuf 3 の機能を使用して必須フィールドを実装する方法と、対応するコード例を詳しく紹介します。初心者でも経験豊富な開発者でも、この記事は必須フィールドの使用法をすぐにマスターし、コードの堅牢性と信頼性を向上させるのに役立ちます。見てみましょう!

質問の内容

私は、grpc/proto-buffers を使用して golang で最初の API エンドポイントを作成しています。私はかなり初心者です。 以下はテストケース用に書いたファイルです

リーリー

これは、上記の v1.go ファイルで endpointrequest オブジェクトがどのように定義されているかです:

リーリー

上記のテスト ケースは正常に動作するようです。

パラメータ a が少なくとも 1 を含む文字列である必要があるため、パラメータ a を効果的に必須パラメータにするための検証ルールを設定しました。したがって、a が省略された場合、エンドポイントは 400 を返します。

しかしここでは、c または b エンドポイントが省略された場合に 400 が返されることを確認したいと思います。これどうやってするの? protobufs 3 では、required キーワードが削除されました。では、文字列以外のパラメータが渡されたかどうかを確認し、それに応じて反応するにはどうすればよいでしょうか?

解決策

簡単に言えば、それはできません。

required は主に、変更により下位互換性がなくなったため削除されました。検証オプションを使用して再実装しようとすることは、それほど大幅ではありません (変更は簡単です) が、ご覧のとおり欠点があります。

代わりに、検証をプロトタイプ定義の外側に保ち、それをアプリケーション自体に移動します。メッセージを受信したら、その内容を必ず確認してください (required が表示された場合も同様です)。まれに、オプションまたは required によって提供される単純な検証で十分な場合があります。

以上がProtobuf 3 フィールドを必須にする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。