https://example.com/api/search?user_id=1
https://example.com/api/search?userId=1
↑どっちを使う?という話です。
個人的には、GET/PUT/POST含めて統一さえされていればどっちでもいいんですが、それで終わってはつまらないのでちょっと語ってみます。
もう一度いいますが、個人的にはぶっちゃけどっちでもいいです。
記法の種類
識別子の記法として考えられるのは、ざっとこんなかんじでしょうか。- lower_snake_case
- C/C++やPythonなどで使うことが多い
- C/C++では、フレームワークのネーミングルールがlowerCamelCaseになっている場合もあり
- UPPER_SNAKE_CASE
- 言語を問わず、定数はこれを使うことが多い
- lowerCamelCase
- JavaやJavaScriptなどで使うことが多い
- Goではパッケージプライベートな識別子にこれを使う
- UpperCamelCase
- クラスのある言語ではクラス名に使うことが多い
- Pythonもクラス名はこれを使う
- Goではこの書式の識別子がexportされる
- lower-kebab-case
- プログラミング言語ではハイフンは演算子として扱われるので識別子には使えない
- URLに使われることもある
- UPPER-KEBAB-CASE
- あまり見ない
日本人ならyakitori-caseでもいいんじゃないですかね。
ケバブケースは使わないよね
まずケバブケースは脱落。
上で書いた通り、ハイフンが識別子として扱われるのであえて使うメリットがないからです。
アッパースネークケース / アッパーキャメルケースは?
続いてスネークケース・キャメルケースの中でも大文字で始めるものはほとんど見た記憶がないです。
複合語でないパラメーター(
id
等)もID
やId
と書かないと整合性が取れないのが原因でしょうか。ようやく本題
user_id
とuserId
はどっちがいい?という話。
まず最初に、「今現在APIの開発に使っている言語がJavaだからJavaのスタイルに合わせてキャメルケースのほうがいい」という理論には説得力を感じません。
仮にPythonで書き直すことになったら全部スネークケースにするつもりかと。バックエンドの言語を変えただけでAPIの互換性をなくすつもりかと。
それぞれの長所・短所を軽く書いてみますので、説得力のあると思った方を選んでください。
- キャメルケースのほうが文字数が少なくて済む
- 数文字短いから何だ、別にそれで帯域が節約されるわけじゃないぞというのは言わない約束
- 日本語キーボードでは
_
を入力するのがちょい面倒 - シフトを押しながらキーボードの右下を押すのがだるい
- USキーボードならシフト+
-
なのでそんなにだるくない - 全部小文字で統一されるスネークケースのほうが
I
とl
といった紛らわしい文字がない - 紛らわしいのは
I
とl
くらいしかないけどね
おまけ: URLにケバブケースが使われるのは?
リンクってデフォルトのスタイルだと文字に下線がつくじゃないですか。
スネークケースのURLだとリンクがついたときにアンダースコアとリンクの下線がくっついて見づらい(スペースのようにも見える)からでしょうか。
URLに_を使わないのはDNS名で使える文字に_が無いからなのではないかと…ファイルパス名部分では_が問題無く受け容れられるものの、サーバー名部分では_が使えないですから。
返信削除あ、本当だ!RFC952のことすっかり忘れてました。ありがとうございます!
削除そしてコメント気づくの遅くてごめんなさい!