{"meta":{"title":"Migrar desde Rest hacia GraphQL","intro":"Obtenga información sobre los procedimientos recomendados y las consideraciones para migrar de GitHubla API DE REST a GitHubGraphQL API.","product":"GraphQL API","breadcrumbs":[{"href":"/es/enterprise-cloud@latest/graphql","title":"GraphQL API"},{"href":"/es/enterprise-cloud@latest/graphql/guides","title":"Guías"},{"href":"/es/enterprise-cloud@latest/graphql/guides/migrating-from-rest-to-graphql","title":"Migración de REST a GraphQL"}],"documentType":"article"},"body":"# Migrar desde Rest hacia GraphQL\n\nObtenga información sobre los procedimientos recomendados y las consideraciones para migrar de GitHubla API DE REST a GitHubGraphQL API.\n\n## Diferencias en la lógica de la API\n\nGitHub proporciona dos API: una API REST y una API de GraphQL. Para obtener más información sobre las API de GitHub, consulte [Comparación de la API REST de GitHub y GraphQL API](/es/enterprise-cloud@latest/rest/about-the-rest-api/comparing-githubs-rest-api-and-graphql-api).\n\nMigrar desde Rest hacia GraphQL represente un cambio significativo en la lógica de las API. Las diferencias entre REST como un estilo y GraphQL como una especificación hacen difícil —y a menudo desaconsejable— reemplazar las llamadas a la API REST con las consultas de la API de GraphQL de una forma uno a uno. Hemos incluido ejemplos específicos de migración a continuación.\n\nPara migrar el código de la [API REST](/es/enterprise-cloud@latest/rest) a la API de GraphQL:\n\n* Revise la [especificación de GraphQL](https://spec.graphql.org/June2018/).\n* Revise el esquema [GraphQL de GitHub](/es/enterprise-cloud@latest/graphql/reference)\n* Considere cómo interactúa actualmente cualquier código existente con la API REST de GitHub\n* Use [Global Node IDs](/es/enterprise-cloud@latest/graphql/guides/using-global-node-ids) para hacer referencia a objetos entre versiones de API\n\nLas ventajas significativas de GraphQL incluyen:\n\n* [Obtención de los datos que necesita y nada más](#example-getting-the-data-you-need-and-nothing-more)\n* [Campos anidados](#example-nesting)\n* [Tipado fuerte](#example-strong-typing)\n\nAquí hay algunos ejemplos de cada una.\n\n## Ejemplo: obtener los datos que necesitas y únicamente eso\n\nUna sola llamada de la API de REST recupera una lista de los miembros de tu organización:\n\n```shell\ncurl -v https://api.github.com/orgs/:org/members\n```\n\nLa carga útil de REST contiene datos excesivos si tu objetivo es recuperar únicamente los nombres de miembros y los enlaces a los avatares. Sin embargo, la consulta de GraphQL recupera únicamente lo que especificas:\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\nConsidera otro ejemplo: recuperar una lista de solicitudes de extracción y revisar si cada una es fusionable. Una llamada a la API REST recupera una lista de solicitudes de incorporación de cambios y sus [representaciones de resumen](/es/enterprise-cloud@latest/rest#summary-representations):\n\n```shell\ncurl -v https://api.github.com/repos/:owner/:repo/pulls\n```\n\nPara determinar si una solicitud de incorporación de cambios se puede fusionar es necesario recuperar cada solicitud individualmente de acuerdo con su [representación detallada](/es/enterprise-cloud@latest/rest#detailed-representations) (una carga útil grande) y comprobar si su atributo `mergeable` es verdadero o falso:\n\n```shell\ncurl -v https://api.github.com/repos/:owner/:repo/pulls/:number\n```\n\nCon GraphQL, solo se pueden recuperar los atributos `number` y `mergeable` para cada solicitud de incorporación de cambios:\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## Ejemplo: Anidar\n\nHacer consultas con campos anidados te permite reemplazar varios llamados de REST con menos consultas de GraphQL. Por ejemplo, para recuperar una solicitud de incorporación de cambios junto con sus confirmaciones, comentarios no revisados y revisiones mediante la **API REST** se necesitan cuatro llamadas independientes:\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\nCon la **API de GraphQL**, puede recuperar los datos con una sola consulta mediante campos anidados:\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\nTambién puede ampliar la eficacia de esta consulta [sustituyendo una variable](/es/enterprise-cloud@latest/graphql/guides/forming-calls-with-graphql#working-with-variables) por el número de pull request.\n\n## Ejemplo: Escritura inflexible\n\nLos esquemas de GraphQL están fuertemente tipados, lo que hace que el manejo de los datos sea más seguro.\n\nImagínese, por ejemplo, que agrega un comentario a una incidencia o solicitud de incorporación de cambios con una [mutación](/es/enterprise-cloud@latest/graphql/reference) de GraphQL y, por error, especifica un entero en lugar de una cadena para el valor de [`clientMutationId`](/es/enterprise-cloud@latest/graphql/reference/issues#mutation-addcomment):\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\nEjecutar esta consulta recuperará errores que especificarán los tipos esperados para esta operación:\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\nAl entrecomillar `1234`, se transforma el valor de un entero a una cadena, el tipo esperado:\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```"}