web-dev-qa-db-ja.com

フィールドの特定の値に基づくGraphQLクエリ

GraphQL APIを使用して特定のレポをgithubから最新のリリースを取得できるようにしたいです。そのためには、ISDRAFTとISPRELELEASEがfalseの最新リリースを取得する必要があります。私は最初の部分を取得することに成功しましたが、クエリの一部を実行する方法を考え出すことができません。

これが私が得た基本的なクエリです( https://developer.github.com/v4/explorer/ )。

{
  repository(owner: "paolosalvatori", name: "ServiceBusExplorer") {
    releases(first: 1, orderBy: {field: CREATED_AT, direction: DESC}) {
      nodes {
        name
        tagName
        resourcePath
        isDraft
        isPrerelease
      }
    }
  }
}
 _

戻り値:

{
  "data": {
    "repository": {
      "releases": {
        "nodes": [
          {
            "name": "3.0.4",
            "tagName": "3.0.4",
            "resourcePath": "/paolosalvatori/ServiceBusExplorer/releases/tag/3.0.4",
            "isDraft": false,
            "isPrerelease": false
          }
        ]
      }
    }
  }
}
 _

私はこれを行う方法を見つけることができないようです。その理由の一部は、私がGraphQLの新たなもの(初めてクエリをやろうとしています)、私は私の質問をどのようにフレーム化する方法はわかりません。

引数をサポートするタイプに基づいて「クエリ」するだけです(リポジトリやリリースの下記のリリースなど)。フィールド値にフィルタを指定する方法があるようです。

リポジトリ: https://developer.github.com/v4/object/repository/

リリース: https://developer.github.com/v4/object/releaseconnection/

ノード: https://developer.github.com/v4/object/release/

5
Raj Rao

引数をサポートするこれらの型に基づいて「クエリ」のみを1つだけできます。

はい:GraphQLは一般的なクエリ言語を同じ方法で定義していません。サーバーとアプリケーションスキーマによって提供されていない方法でフィールドの結果をソートまたはフィルタリングすることはできません。

GraphQL APIを使用して特定のレポをgithubからgithubからの最新の[非プラセリース]リリースを取得できるようになりたいです。

すでに見つかったように、 releases typeのRepositoryフィールド これらのフィールドを並べ替えるかフィルタリングするオプションがありません。代わりに、複数のGraphQL呼び出しを使用して、リリースを1つずつ繰り返すことができます。これらは個別に見えます

_query NextRelease($owner: String!, $name: String!, $after: String) {
  repository(owner: $owner, name: $name) {
    releases(first: 1,
             orderBy: {field: CREATED_AT, direction: DESC},
             after: $after) {
      pageInfo { lastCursor }
      nodes { ... ReleaseData } # from the question
    }
  }
}
_

これを実行しているのと同じ方法で実行します(リポジトリを別々のGraphQL変数に識別する情報を分割します)。最初の通話のafter変数を除去することができます。 (例のように)_"isDraft": false, "isPrerelease": false_を返す場合は、設定します。そうでない場合は、再試行する必要があります。レスポンスのlastCursorから値を取り、同じクエリを実行し、そのカーソル値をafter変数値として渡します。

2
David Maze