web-dev-qa-db-ja.com

GraphQLスキーマの命名のベストプラクティスは何ですか?

GraphQLを検討している重要なアプリケーションの開発を始めています。スキーマの最初のドラフトで作業しているとき、製品の成熟に合わせて拡張される命名規則を確立しようとして少し麻痺しました。私は、スキーマを成長させて実行しなければならないか、行き止まりや矛盾をうまく回避しなければならない人からの洞察を本当に感謝します:

  1. 一般的に、インターフェースの名前に「インターフェース」という名前を付けておくと便利ですか?たとえば、大規模なアプリではProfileまたはProfileInterfaceが望ましいでしょうか?

    interface ProfileInterface {
      # fields here...
    }
    
    type UserProfile implements ProfileInterface {
      # implemented fields here...
    }
    
  2. 単一列挙値を「定数」として指定することは一般的ですか?

    enum GeoJSONFeatureTypeConstant {
      feature
    }
    
    interface GeoJSONFeatureInterface {
      id: ID
      type: GeoJSONFeatureTypeConstant!
      geometry: GeoJSONGeometryInterface!
      properties: GeoJSONProperties
    }
    
  3. オールオアナッシングobjectsをscalarまたはtypeとして宣言するのがベストプラクティスですか。2つの線はどこに引かれますか?通常、配列として表現されるPoint型を想像してください[x,y];どちらがより馬鹿げているでしょうか?

    scalar Point
    
    type Point {
      x: Float
      y: Float
    }
    
  4. GraphQLの命名規則または型宣言に特に関連する、経験なくして知るのが難しいその他のベストプラクティス。

前もって感謝します!


この質問は私が好むはずの勢いを得ていないので、有用なスニペットを見つけたら投稿し始めます。これはある種の答えに発展するかもしれません。

単一の概念オブジェクトでは入力タイプと出力タイプの両方がわずかに異なることが多いため、入力タイプの名前を最後に「Input」と付けると便利です。

http://graphql.org/graphql-js/mutations-and-input-types/

29
Mike Marcacci

私はこれらの同じ質問について考えました、そして、これがあなたに役立つことを願っています。

1。すべてのインターフェイスの最後にインターフェイスを追加することは慣用的だとは思わない。代わりに、わかりやすい名前を付けることをお勧めします。インターフェイスに関連する GraphQL Specification で提供されている例を検討してください。これらのタイプのいずれにもInterfaceは追加されません。

2。列挙型は、複数の関連する値がある場合にのみ有利です。可能な値が1つしかない場合、タイプを含めることがどのように役立つかわかりません。列挙値は、列挙に関連する GraphQL仕様 に従って、すべてのキャップとアンダースコアで名前が付けられます。

3。スカラー型の実装を決定した場合、フィールドの検証はユーザー次第です。この特定の場合、Pointを2次元または3次元にすることができるため、Pointをタイプとして提供するのが最も理にかなっています。型として定義する方がより宣言的です。

Date、Email、Urlなどの値は、スカラー型の一般的な例です。これらはセマンティック値を提供し、クライアントはこれらのフィールドに何を期待するかを知っています。

カスタムスカラーに関連する section を次に示します。 です。

4。this Lee Byronの記事が役立ちます。

11
user3902496