{"meta":{"title":"Migrieren von REST zu GraphQL","intro":"Lernen Sie bewährte Methoden und Überlegungen für die Migration von GitHubder REST-API zur GitHubGraphQL-API kennen.","product":"GraphQL-API","breadcrumbs":[{"href":"/de/graphql","title":"GraphQL-API"},{"href":"/de/graphql/guides","title":"Anleitungen"},{"href":"/de/graphql/guides/migrating-from-rest-to-graphql","title":"Migrieren von REST zu GraphQL"}],"documentType":"article"},"body":"# Migrieren von REST zu GraphQL\n\nLernen Sie bewährte Methoden und Überlegungen für die Migration von GitHubder REST-API zur GitHubGraphQL-API kennen.\n\n## Unterschiede in der API-Logik\n\nGitHub stellt zwei APIs bereit: eine REST-API und eine GraphQL-API. Weitere Informationen über die APIs von GitHub finden Sie unter [Vergleich der REST-API und der GraphQL-API von GitHub](/de/rest/about-the-rest-api/comparing-githubs-rest-api-and-graphql-api).\n\nBeim Migrieren von REST zu GraphQL ändert sich die API-Logik drastisch. Die Unterschiede zwischen REST als Stil und GraphQL als Spezifikation gestalten es oft schwierig (und lästig), REST-API-Aufrufe eins zu eins durch GraphQL-API-Abfragen zu ersetzen. Unten findest du spezifische Beispiele für die Migration.\n\nSo migrierst du deinen Code aus der [REST-API](/de/rest) zur GraphQL-API:\n\n* Überprüfe die [GraphQL-Spezifikation](https://spec.graphql.org/June2018/).\n* Überprüfen Sie das [GraphQL-Schema GitHub](/de/graphql/reference)\n* Überlegen Sie, wie vorhandener Code derzeit mit der REST-API GitHub interagiert.\n* Verwenden Sie [Global Node IDs](/de/graphql/guides/using-global-node-ids), um zwischen API-Versionen auf Objekte zu verweisen.\n\nFolgendes gehört zu den wichtigsten Vorteilen von GraphQL:\n\n* [Genau die benötigten Daten und nichts darüber hinaus abrufen.](#example-getting-the-data-you-need-and-nothing-more)\n* [Geschachtelte Felder](#example-nesting)\n* [Starke Typisierung](#example-strong-typing)\n\nIm Folgenden findest du Beispiele zu jedem Vorteil.\n\n## Beispiel: Nur die benötigten Daten werden erhalten, und nichts mehr\n\nEin einzelner REST-API-Aufruf ruft eine Liste der Mitglieder deiner Organisation ab:\n\n```shell\ncurl -v https://api.github.com/orgs/:org/members\n```\n\nWenn du nur Namen von Mitgliedern und Links zu Avataren abrufen möchtest, enthalten die REST-Nutzdaten eine zu große Datenmenge. Eine GraphQL-Abfrage gibt jedoch nur das zurück, was du angibst:\n\n```graphql\nquery {\n    organization(login:\"github\") {\n    membersWithRole(first: 100) {\n      edges {\n        node {\n          name\n          avatarUrl\n        }\n      }\n    }\n  }\n}\n```\n\nWeiteres Beispiel: Du rufst eine Liste von Pull Requests ab und überprüfst, ob alle gemergt werden können. Ein Aufruf der REST-API ruft eine Liste der Pull Requests und deren [Zusammenfassungsdarstellungen](/de/rest#summary-representations) ab:\n\n```shell\ncurl -v https://api.github.com/repos/:owner/:repo/pulls\n```\n\nUm festzustellen, ob ein Pull Request zusammengeführt werden kann, muss jeder Pull Request aufgrund der [detaillierten Darstellung](/de/rest#detailed-representations) (einer großen Datenmenge) einzeln abgerufen werden, und du musst überprüfen, ob das `mergeable`-Attribut true oder false ist.\n\n```shell\ncurl -v https://api.github.com/repos/:owner/:repo/pulls/:number\n```\n\nMit GraphQL kannst du nur die `number`- und `mergeable`-Attribute jedes Pull Requests abrufen:\n\n```graphql\nquery {\n    repository(owner:\"octocat\", name:\"Hello-World\") {\n    pullRequests(last: 10) {\n      edges {\n        node {\n          number\n          mergeable\n        }\n      }\n    }\n  }\n}\n```\n\n## Beispiel: Schachtelung\n\nBei Abfragen mit geschachtelten Felder kannst du anstelle von mehreren REST-Aufrufen weniger GraphQL-Abfragen verwenden. Beispielsweise erfordert das Abrufen eines Pull Requests mit den Commits, nicht überprüften Kommentaren und Reviews mithilfe der **REST-API** vier separate Aufrufe:\n\n```shell\ncurl -v https://api.github.com/repos/:owner/:repo/pulls/:number\ncurl -v https://api.github.com/repos/:owner/:repo/pulls/:number/commits\ncurl -v https://api.github.com/repos/:owner/:repo/issues/:number/comments\ncurl -v https://api.github.com/repos/:owner/:repo/pulls/:number/reviews\n```\n\nMit der **GraphQL-API** kannst du die Daten mit einer einzelnen Abfrage und verschachtelten Feldern abrufen.\n\n```graphql\n{\n  repository(owner: \"octocat\", name: \"Hello-World\") {\n    pullRequest(number: 1) {\n      commits(first: 10) {\n        edges {\n          node {\n            commit {\n              oid\n              message\n            }\n          }\n        }\n      }\n      comments(first: 10) {\n        edges {\n          node {\n            body\n            author {\n              login\n            }\n          }\n        }\n      }\n      reviews(first: 10) {\n        edges {\n          node {\n            state\n          }\n        }\n      }\n    }\n  }\n}\n```\n\nSie können die Leistungsfähigkeit dieser Abfrage auch durch [substituieren einer Variablen](/de/graphql/guides/forming-calls-with-graphql#working-with-variables) für die Pullanforderungsnummer erweitern.\n\n## Beispiel: Starke Typisierung\n\nGraphQL-Schemas sind stark typisiert, wodurch der Umgang mit Daten sicherer wird.\n\nStelle dir vor, dass du mithilfe einer GraphQL-[Mutation](/de/graphql/reference) einen Kommentar zu einem Issue oder Pull Request hinzufügst und versehentlich eine ganze Zahl anstelle einer Zeichenfolge für den Wert von [`clientMutationId`](/de/graphql/reference/issues#mutation-addcomment) angibst:\n\n```graphql\nmutation {\n  addComment(input:{clientMutationId: 1234, subjectId: \"MDA6SXNzdWUyMjcyMDA2MTT=\", body: \"Looks good to me!\"}) {\n    clientMutationId\n    commentEdge {\n      node {\n        body\n        repository {\n          id\n          name\n          nameWithOwner\n        }\n        issue {\n          number\n        }\n      }\n    }\n  }\n}\n```\n\nDie Ausführung dieser Abfrage gibt Fehler zurück, die angeben, welche Typen bei dem Vorgang erwartet werden:\n\n```json\n{\n  \"data\": null,\n  \"errors\": [\n    {\n      \"message\": \"Argument 'input' on Field 'addComment' has an invalid value. Expected type 'AddCommentInput!'.\",\n      \"locations\": [\n        {\n          \"line\": 3,\n          \"column\": 3\n        }\n      ]\n    },\n    {\n      \"message\": \"Argument 'clientMutationId' on InputObject 'AddCommentInput' has an invalid value. Expected type 'String'.\",\n      \"locations\": [\n        {\n          \"line\": 3,\n          \"column\": 20\n        }\n      ]\n    }\n  ]\n}\n```\n\nWenn du `1234` mit Anführungszeichen umschließt, wird der Wert von einer ganzen Zahl in eine Zeichenfolge (den erwarteten Typ) umgewandelt:\n\n```graphql\nmutation {\n  addComment(input:{clientMutationId: \"1234\", subjectId: \"MDA6SXNzdWUyMjcyMDA2MTT=\", body: \"Looks good to me!\"}) {\n    clientMutationId\n    commentEdge {\n      node {\n        body\n        repository {\n          id\n          name\n          nameWithOwner\n        }\n        issue {\n          number\n        }\n      }\n    }\n  }\n}\n```"}