curl을 사용하여 명령줄에서 GraphQL 요청 만들기

5247 단어 graphqlcurl
<TLDR> curl을 사용하여 원격 셸에서 GraphQL 쿼리 및 변형을 수행하고 요청 문제를 해결합니다</TLDR>.

개발자가 사용할 수 있는 작업에 가장 적합한 도구를 모두 알고 사용하고 있습니까? 나는 확실히하지 않는다! 여러 메일링 리스트, 블로그 게시물, 트윗 및 보도 자료를 통해 최신 정보를 얻으려고 노력하고 있습니다. 소방호스로 물을 마시는 그 기분 아실 거에요. 그리고 Limitless 영화의 신비한 알약을 사용할 수 있게 될 때까지 몇 가지 훌륭한 조언을 놓칠 수 있음을 인정해야 합니다.

하지만 유용한 도구나 기술을 발견하면 내 도구 벨트에 추가하려고 합니다. 주로 Postman 및 GraphQL Playground로 작업하고 주로 터미널을 사용하여 실행하는 경우npm install http 요청을 만들기 위한 명령줄 도구인 curl에 대해 조금 알고 싶을 수 있습니다.



GraphQL, 컬... 뭐, 왜?



이에 대한 매우 구체적인 사용 사례가 있습니다. 당신이 프론트엔드 개발자라고 상상해보세요. 팀에서 개발한 GraphQL API로 작업하고 있습니다. 갑자기 오류 메시지가 표시되고 무슨 일이 일어나고 있는지 전혀 알 수 없습니다. 따라서 Slack을 열고 동료 Tim에게 DM을 보냅니다(미안한 Tim이 오늘 책임자가 됩니다).

당신: 이봐 팀! 개발 환경에서 GraphQL 요청에 문제가 있습니다. API가 실행 중입니까?
팀: 그렇죠. 실패한 쿼리는 무엇입니까?
당신: 쿼리 복사 붙여넣기
팀: 좋아 보이는데... 내 컴퓨터에서 시도해 볼게요...
팀: 네, 잘 작동합니다. 어떤 끝점 URL을 사용하고 있습니까?
당신: dev-server.mycompany.com/graphql
팀: 맞아. 기이한...
Tim: 아, Authorization 헤더에 인증 토큰을 보내는 것을 잊지 않았나요?
당신: 확인해볼게..네 거기있어요
... Q&A 5분 더
Tim: 이봐, 우리가 지금 dev API에 HTTPS 연결이 필요하다고 발표한 거 기억나? http 또는 https로 연결하고 있습니까?
당신: 으악. 감사합니다 팀.

이와 같은 문제에 당신과 팀의 시간이 10분도 걸리지 않을 것이라고 상상할 수 있습니다. Tim에게 모든 컨텍스트와 함께 전체 요청을 즉시 보낼 수 있다면 더 쉽지 않을까요?

당신: 이봐 팀! 개발 환경에서 GraphQL 요청에 문제가 있습니다. 다음은 컬 버전입니다.
당신: 복사 붙여넣기 컬콜
Tim: 어디 보자... 한 가지를 제외하고는 맞습니다. URL은 http가 아니라 https여야 합니다.
당신: 으악. 감사합니다 팀.

요약하면 여기에서 논의하는 맥락에서 curl은 다음과 같은 경우에 유용할 수 있습니다.
  • 다른 서버의 셸 세션에서 요청해야 합니다(최근에 다른 지리적 위치에 있는 VM의 API 응답 대기 시간을 테스트하는 데 사용했습니다)
  • .
  • 쉽게 재현할 수 있는 요청을 온라인으로 보내거나 게시하는 방법이 필요합니다(팀과 API 문제를 해결하거나 StackOverflow에 질문하기)
  • .

    요청 예시



    다음은 몇 가지 일반적인 요청 변형입니다.

    GraphQL 쿼리 요청하기



    curl 'https://countries.trevorblades.com/' \
      -X POST \
      -H 'content-type: application/json' \
      --data '{
        "query": "{ continents { code name } }"
      }'
    

    변형 요청하기:



    curl 'https://graphql-api-url' \
      -X POST \
      -H 'content-type: application/json' \
      --data '{
        "variables":{"name":"John Doe"},
        "query":"mutation ($name: String!) { createUser(name: $name) }"
      }'
    

    추가 헤더 전달



    헤더에서 승인을 전달해야 하는 경우 다른 인수-H를 추가합니다.

    curl 'https://countries.trevorblades.com/' \
      -X POST \
      -H 'Authorization: Token xxxxx' \
      -H 'content-type: application/json' \
      --data '{
        "query": "{ continents { code name } }"
      }'
    


    응답 헤더 인쇄



    응답 헤더를 보려면 -D -를 추가하십시오(stdout에 헤더 덤프).

    curl 'https://countries.trevorblades.com/' \
      -X POST \
      -D - \
      -H 'content-type: application/json' \
      --data '{
        "query": "{ continents { code name } }"
      }'
    


    예쁜 인쇄 응답 JSON



    출력 JSON을 예쁘게 인쇄하려면 curl 호출 끝에 | python -m json.tool를 추가합니다.

    curl 'https://countries.trevorblades.com/' \
      -X POST \
      -H 'content-type: application/json' \
      --data '{
        "query": "{ continents { code name } }"
      }' | python -m json.tool
    


    헤더도 인쇄하면 예쁜 인쇄가 작동하지 않으며 오류는 No JSON object could be decoded 입니다. 그것은 더 이상 유효한 JSON이 아니기 때문에 의미가 있습니다.
    명령을 실행할 때 진행 표시줄이 나타날 수도 있습니다. 추가-sS(자동) 인수를 사용하여 제거할 수 있습니다.

    오늘은 여기까지입니다. 도움을 주셔서 감사합니다 팀!

    이러한 유형의 콘텐츠가 마음에 들면 Twitter에서 최신 업데이트를 확인할 수 있습니다.

    좋은 웹페이지 즐겨찾기