GitHub graphQL API несколько запросов по организациям и репозиториям - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь получить доступ к GitHub, используя данные о множественных организациях и репозиториях graphQL. Код, который я написал ниже, получает только 1 организацию и хранилище. Я подумал, используя переменные из двух массивов [String!], Один для организаций, а второй для репозиториев. Итак

organization(login:"javascript") {...} 

должно быть

organization(login:$organization) {...}

и

repository(owner:"javascript", name:"sorted-array") {...}

должно быть

repository(owner:$organization, name:$repository) {...}

Но я не смог найти, как внедрить переменные в приведенный ниже код.

query {
  rateLimit{
  cost
  remaining
  resetAt
 }
organization(login:"javascript") {
    repositories{
      totalCount
    }
  }
  repository(owner:"javascript", name:"sorted-array") {
    updatedAt
    branches: refs(refPrefix:"refs/heads/") {
      totalCount
    }
    tags: refs(refPrefix:"refs/tags/") {
      totalCount
    }
    releases {
      totalCount
    }
    object(expression:"master") {
      ... on Commit {
        committedDate
        history {
          totalCount
        }
      }
    }
  }
}

Буду признателен за помощь. Спасибо

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Вот мои решения, надеюсь, это будет кому-то полезно :) Первый ответ - использование переменных Array с несколькими идентификаторами организаций "Facebook", "JavaScript" и хранилища "360-Capture-SDK", "отсортированный массив". Если у вас есть 10, 20 организаций / репозиториев или более, вы прекрасно проведете время, извлекая идентификаторы из REST API:).

query inputArray($idOrg: [ID!]! $idRepo: [ID!]!){
  orgNode:nodes(ids: $idOrg){
    ...on Organization{
      name
    }
  }
  repNode:nodes(ids: $idRepo){
    ...on Repository{
      name
    }
  }
}

{
  "idOrg": ["MDEyOk9yZ2FuaXphdGlvbjY5NjMx","MDEyOk9yZ2FuaXphdGlvbjE3ODIxODA="],
  "idRepo":["MDEwOlJlcG9zaXRvcnk4Njg2MDg0Nw==","MDEwOlJlcG9zaXRvcnk5NzkxMTYy"]
}

Второй ответ использует более читабельный подход, хотя и громоздкий.

query{
  FacebookOrg: organization(login: "facebook") {
    ...OrgInfo
  }

  JavaScriptOrg: organization(login: "javaScript") {
    ...OrgInfo
  }

  FacebookRep: repository(owner: "facebook" name:"360-Capture-SDK"){
    ...RepInfo
  }

  JavaScriptRep: repository(owner: "javaScript" name:"sorted-array"){
    ...RepInfo
  }
}

fragment OrgInfo on Organization {
  name
}

fragment RepInfo on Repository {
  name
}
0 голосов
/ 27 июня 2018

Вот запрос, обновленный для работы с переменными

query getOrg($owner: String!, $repo: String! ){
    organization(login:$owner) {
    repositories{
        totalCount
    }
  }
  repository(owner:$owner, name:$repo) {
    updatedAt
    branches: refs(refPrefix:"refs/heads/") {
      totalCount
    }
    tags: refs(refPrefix:"refs/tags/") {
      totalCount
    }
    releases {
      totalCount
    }
    object(expression:"master") {
      ... on Commit {
        committedDate
        history {
          totalCount
        }
      }
    }
  }
}

Однако, вам может быть лучше использовать идентификаторы узлов GraphQL в качестве массива входных данных. С идентификатором узла организации или репозитория, что-то вроде ...

query inputArray($id: [ID!]!){
  nodes(ids: $id){
    ...on Repository{
      id
    }
  }
}

Обратите внимание, что GitHub V3 API поддерживает возврат идентификаторов узлов GraphQL для облегчения перехода к запросам GraphQL.

...