たくさんのクエリを書く代わりに、もっとエレガントな方法はありますか?

アダムトルマ

GraphQL、Apollo Express、MongoDBとMongooseを使用して小さなブログを作成しています。

現在、記事はIDで取得されており、訪問者はここで「123」と言うIDの記事を閲覧できます:example.com/articles/123

代わりに、スラッグを使用したいので、訪問者はexample.com/articles/same-article-as-aboveにアクセスできます。

これまでの私のリゾルバ:

import { gql } from 'apollo-server-express';

export default gql`
  extend type Query {
    articles: [Article!]
    article(id: ID!): Article
  }

  type Article {
    id: ID!
    slug: String!
    title: String!
    desription: String!
    text: String!
  }
`;

別のクエリを追加するだけです。

    articleBySlug(slug: String!): Article

これは完全にうまくいくでしょう。しかし、これは私にはあまりエレガントに見えず、基本的な理解が不足しているように感じます。タイトル、テキスト、説明などで記事を取得しようとするたびに、リゾルバーに新しいクエリを追加する必要がありますか?「articleByTitle」、「articleByDate」などのクエリがたくさん発生します。誰かが私にヒント、例、またはいくつかのベストプラクティスを教えてもらえますか(または、クエリをさらに追加する必要があることを確認してください☺)。

ミカエル・リルバンク

これを行う一般的な方法は、すべての入力を同じクエリに追加し、それらをオプションにすることです。

export default gql`
  extend type Query {
    articles: [Article!]
    article(id: ID, slug: String, date: String, search: String): Article
  }

  type Article {
    id: ID!
    slug: String!
    title: String!
    description: String!
    text: String!
  }
`;

次に、リゾルバーでidslugまたはdateが提供されていることを確認し提供されていない場合はエラーを返します。

もう1つのオプションは、Gmailが使用するものと同様の検索文字列(たとえばid:x before:2012-12-12)を使用して、リゾルバーで解析することです。

export default gql`
  extend type Query {
    articles: [Article!]
    article(search: String): Article
  }

  type Article {
    id: ID!
    slug: String!
    title: String!
    description: String!
    text: String!
  }
`;

3番目のオプションは、いくつかのタイプを返すことができる個別の検索クエリを設定することです。

export default gql`
  extend type Query {
    articles: [Article!]
    search(query: String!, type: SearchType): SearchResult 
  }

  union SearchResult = Article | User

  enum SearchType {
    ARTICLE
    USER
  }

  type Article {
    id: ID!
    slug: String!
    title: String!
    description: String!
    text: String!
  }

  type User {
    id: ID!
    email: String!
    name: String!
  }
`;

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

これを書くためのより短く/エレガント/効率的な方法はありますか?

分類Dev

この「if」リストをよりエレガントな方法で書く方法はありますか?

分類Dev

これらの条件を書くためのよりエレガントな方法はありますか?

分類Dev

このLCM関数を書くためのよりクリーンでエレガントなHaskellの方法はありますか?

分類Dev

これを書くためのよりコンパクトでエレガントな方法はありますか?

分類Dev

Rで行列オブジェクトを書くための\ Sexpr {}に代わるものはありますか?

分類Dev

このPowershellスクリプトを1行で、またはおそらくもっと簡単な方法で書く方法はありますか?

分類Dev

たくさん書くのを避けるエレガントな方法(クリックして表示を隠す)

分類Dev

関数の引数に基づいて画像の名前を返す関数を書くよりエレガントな方法はありますか?

分類Dev

配列サイズがわからないRubyでwhileループを書くよりエレガントな方法はありますか?

分類Dev

Kotlinでこのゲッターを書くためのよりエレガントな方法はありますか?

分類Dev

エコー* | xargs -n1 echo、行ごとのリストのより短く、よりエレガントな方法はありますか?

分類Dev

このクエリの何が問題になっていますか?返されたデータはどれも正しくありません

分類Dev

Dialogflowエージェント間でマージする方法はありますか?または、少なくともあるエージェントから別のエージェントにインテントをエクスポートしますか?

分類Dev

少なくとも1つの要素に特定のクラスがあるかどうかをチェックするエレガントな方法はありますか?

分類Dev

イベント/トリガーを定期的にチェックするためのよりエレガントな方法はありますか?

分類Dev

INの代わりにINNERJOINを使用しても、MySQLクエリは非常に遅くなります

分類Dev

オブジェクトはReactの子としては無効です(見つかった:キー{items}を持つオブジェクト)。子のコレクションをレンダリングするつもりなら、代わりに配列を使用してください

分類Dev

SelectManyの代わりとなるエレガントなLINQクエリを探しています

分類Dev

PythonのCurrencyConverter。エラー「金額」が定義されていません、なぜですか?。また、このコードを書くためのより短いまたはよりコンパクトな方法はありますか?

分類Dev

このSQLクエリを書くためのより効率的な方法はありますか?

分類Dev

このクエリを書くためのより効率的な方法はありますか?

分類Dev

このSQLクエリ(ユニオン)を書くためのより良い方法はありますか?

分類Dev

コードを読みやすくするためにJavaブール値の名前を変更するエレガントな方法はありますか?

分類Dev

実際の値を割り当てたばかりのnull許容フィールドはもうnullにできないことをコンパイラに納得させる、エレガントなkotlinの方法はありますか?

分類Dev

円の中にエレガントに矢印を描く方法はありますか

分類Dev

情報スキーマログインしたユーザーごとに異なる列のデフォルトを提供します。クエリはまったく同じですが、理由はわかりません。

分類Dev

私が書いたクエリを書くためのより良い方法はありますか

分類Dev

cp -r:「dst」を作成する代わりに「そのようなファイルまたはディレクトリはありません」エラーをトリガーします

Related 関連記事

  1. 1

    これを書くためのより短く/エレガント/効率的な方法はありますか?

  2. 2

    この「if」リストをよりエレガントな方法で書く方法はありますか?

  3. 3

    これらの条件を書くためのよりエレガントな方法はありますか?

  4. 4

    このLCM関数を書くためのよりクリーンでエレガントなHaskellの方法はありますか?

  5. 5

    これを書くためのよりコンパクトでエレガントな方法はありますか?

  6. 6

    Rで行列オブジェクトを書くための\ Sexpr {}に代わるものはありますか?

  7. 7

    このPowershellスクリプトを1行で、またはおそらくもっと簡単な方法で書く方法はありますか?

  8. 8

    たくさん書くのを避けるエレガントな方法(クリックして表示を隠す)

  9. 9

    関数の引数に基づいて画像の名前を返す関数を書くよりエレガントな方法はありますか?

  10. 10

    配列サイズがわからないRubyでwhileループを書くよりエレガントな方法はありますか?

  11. 11

    Kotlinでこのゲッターを書くためのよりエレガントな方法はありますか?

  12. 12

    エコー* | xargs -n1 echo、行ごとのリストのより短く、よりエレガントな方法はありますか?

  13. 13

    このクエリの何が問題になっていますか?返されたデータはどれも正しくありません

  14. 14

    Dialogflowエージェント間でマージする方法はありますか?または、少なくともあるエージェントから別のエージェントにインテントをエクスポートしますか?

  15. 15

    少なくとも1つの要素に特定のクラスがあるかどうかをチェックするエレガントな方法はありますか?

  16. 16

    イベント/トリガーを定期的にチェックするためのよりエレガントな方法はありますか?

  17. 17

    INの代わりにINNERJOINを使用しても、MySQLクエリは非常に遅くなります

  18. 18

    オブジェクトはReactの子としては無効です(見つかった:キー{items}を持つオブジェクト)。子のコレクションをレンダリングするつもりなら、代わりに配列を使用してください

  19. 19

    SelectManyの代わりとなるエレガントなLINQクエリを探しています

  20. 20

    PythonのCurrencyConverter。エラー「金額」が定義されていません、なぜですか?。また、このコードを書くためのより短いまたはよりコンパクトな方法はありますか?

  21. 21

    このSQLクエリを書くためのより効率的な方法はありますか?

  22. 22

    このクエリを書くためのより効率的な方法はありますか?

  23. 23

    このSQLクエリ(ユニオン)を書くためのより良い方法はありますか?

  24. 24

    コードを読みやすくするためにJavaブール値の名前を変更するエレガントな方法はありますか?

  25. 25

    実際の値を割り当てたばかりのnull許容フィールドはもうnullにできないことをコンパイラに納得させる、エレガントなkotlinの方法はありますか?

  26. 26

    円の中にエレガントに矢印を描く方法はありますか

  27. 27

    情報スキーマログインしたユーザーごとに異なる列のデフォルトを提供します。クエリはまったく同じですが、理由はわかりません。

  28. 28

    私が書いたクエリを書くためのより良い方法はありますか

  29. 29

    cp -r:「dst」を作成する代わりに「そのようなファイルまたはディレクトリはありません」エラーをトリガーします

ホットタグ

アーカイブ