0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

protobuf.devのAPI Best Practicesを読んでいく全部俺Advent Calendar 2024

Day 4

API Best Practices ~IDにはstring型をつかうこと , クライアントが構築/解析することを期待する文字列にデータをエンコードしてはならない

Last updated at Posted at 2024-12-04

IDにはstring型をつかうこと

[https://protobuf.dev/programming-guides/api/#integer-field-for-id]

オブジェクトの識別子としてint64を使いたくなるが代わりに文字列を使おう。

DB で AUTO_INCREMENT ID などを利用していると特に int64 にしたくなりますが、
とりあえず string 型で定義しておくと、リンク先にあるようなシリアライズする拡張性も生まれてきます。

クライアントが構築/解析することを期待する文字列にデータをエンコードしてはならない

[https://protobuf.dev/programming-guides/api/#dont-encode-data-in-a-string]

利用者にとっては手間がかかり、開発者にも混乱を招く。

string型にメッセージ定義で表現しきれない独自の仕様を内包するために、膨大なコメントを書いたり別個にドキュメントを書いたりしたりコスト増加を招きます。

身近(?)な例でいうと json 文字列そのものを保存したい場合に、string型として定義してはいけないということ。
パースした構造をメッセージ定義して、それぞれをプリミティブな型まで分解したメッセージ定義にしておくこと。

対フロントエンドでHTMLを返す(NG)

[https://protobuf.dev/programming-guides/api/#returning-html]

フロントエンド用の定義でHTMLを返したいケースなど、ついやってしまいがちなパターンの危険性が記載してあります。
通常はデータを返し、HTML構築はフロントエンドのテンプレートを利用するなどしたほうがいいでしょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?