2017-12-18 5 views
1

私が使用したアプリケーション構築しています:GraphQL IDをクライアント上の文字列として扱うべきですか?

  • MySQLをバックエンドデータベースとして
  • アポロGraphQLサーバーを
  • Sequelize
GraphQLとMySQLの間のORM層としてそのデータベースに対するクエリレイヤとしての

私はGraphQLスキーマを構築しているので、GraphQL IDデータ型を使ってレコードを一意に識別しています。

type Person { 
    id: ID! 
    firstName: String 
    middleName: String 
    lastName: String 
    createdAt: String 
    updatedAt: String 
} 

Sequelizeコネクタ

export const Person = sequelize.define('person', { 
    firstName: { type: Sequelize.STRING }, 
    middleName: { type: Sequelize.STRING }, 
    lastName: { type: Sequelize.STRING }, 
}); 

GraphQLリゾルバ:

Query: { 
    person(_, args) { 
    return Person.findById(args.id); 
} 
ここでは例のスキーマとそのMySQLのリゾルバ/コネクタ

Graphqlタイプです

すべてが動作するようにします。ここに私の質問です。 GraphQLは文字列としてIDを扱うようです。 ID値はSequelizeによってMySQLデータベースにINTとして格納されます。私はGraphQLを使用して、データベース内のID値と一致する文字列または整数でMySQLデータベースを照会することができます。ただし、GraphQLは常にID値を文字列として返します。

クライアントでこの値をどのように処理する必要がありますか?私はそれをGraphQLから取得するとすぐに整数に変換する必要がありますか? ID値を文字列として格納するためにsequelizeコードを変更する必要がありますか?このようなGraphQL IDを使用する際に進める正しい方法はありますか?

答えて

2

IDは(2016年10月ワーキングドラフト)GraphQL specificationに記載のスカラ型である:IDタイプは文字列と同じ方法でシリアル化される

。しかし、人間が読めるようには意図されていません。それはしばしば数値ですが、常にStringとしてシリアル化する必要があります。


あなたの観察

私は、文字列またはデータベース内のID値と一致した整数のいずれかでのMySQL DBを照会するGraphQLを使用することができます。ただし、GraphQLは常にID値を文字列として返します。

仕様約 結果強制と整列される:IDが

を表すことができる

GraphQLは、IDのフォーマットに依存しないで、多くのフォーマット間の一貫性を確保するために、文字列にシリアライズと入力強制

入力タイプ、または整数(例えば、「4」のように)任意の文字列として期待(例えば4)入力値がIDに応じてIDを強制されるべきフォーマット所与GraphQLサーバは


を期待します

クライアントでこの値をどのように処理する必要がありますか?

  • ID結果と協力して、文字列として扱います。
  • ID入力(GraphQL変数または突然変異またはクエリの入力パラメータ)を使用する場合は、整数または文字列を使用できます。

私はいつものようにすぐに私はGraphQLからそれを得るよう整数に変換する必要がありますか?

これはアプリケーションによって大きく異なります。ここで明確な「はい」または「いいえ」を指示する一般的な規則はありません。

ID値を文字列として格納するためにsequelizeコードを変更する必要がありますか?

いいえ、必須ではありません。

IDタイプについてGraphQL仕様はGraphQLサーバーがID入力と出力を処理するために期待されているだけでどのように、どのように idをカバーしていません。この動作を保証するのはGraphQLレイヤーまでです。実際のストレージでどのようにIDを処理するかは、ストレージレイヤーまでです。

このようなGraphQL IDを使用する際に正しい方法がありますか?

は、私はまた、これは、この問題の周りの様々な考察の優れた説明で、この質問:)

+1

に答える上記の答えを願っています。ありがとう。 GraphQLは、データ構造に対するオープンエンドのアプローチを提供し、**正しい**方法を理解するのは難しいかもしれません。 –

関連する問題