콘텐츠로 건너뛰기

🌐 OpenAPI → cURL 명령 생성

OpenAPI 3.x YAML / JSON 사양을 붙여넣으면 모든 엔드포인트를 실행 가능한 cURL 명령으로 일괄 변환.

완전 무료 가입 불필요 브라우저 완결 5 개 언어 다크 모드
🔒 프라이버시 보장: OpenAPI 사양은 서버로 전송되지 않습니다. 모든 처리는 브라우저 내에서 완료됩니다.

생성된 cURL 명령

🔗 관련 도구

📖 자주 걸리는 지점

OpenAPI 3.x 의 YAML / JSON 을 붙여 넣으면 모든 엔드포인트를 실행 가능한 형태의 cURL 명령으로 일괄 변환합니다. 해석은 브라우저 안에서 끝나며 사양은 전송되지 않습니다. 하는 일은 사양서의 기술을 기계적으로 명령으로 재구성하는 것뿐이며 그대로 두드려서 통과한다는 보장은 없습니다 — 나온 명령의 품질은 원래 사양에 example 이 얼마나 쓰여 있는지로 거의 정해집니다.

사례 무슨 일이 일어나는가 어떻게 하면 되는가
요청 본문이 비어 있거나 {} 가 된다 원인은 대개 $ref 가 외부 파일을 가리키고 있는 것입니다. $ref: "./schemas/user.yaml#/User" 같은 참조는 붙여 넣은 한 파일 안에서만으로는 해결할 수 없습니다. 대규모 API 사양은 스키마를 다른 파일로 잘라 내는 것이 보통이므로 실무에서는 오히려 이쪽이 다수파입니다. 같은 파일 안의 #/components/schemas/User 는 해결할 수 있지만 allOf / oneOf / anyOf 의 합성은 완전히 펼칠 수 없습니다oneOf 는 어느 것을 골라야 할지 사양상 정해지지 않기 때문입니다. 붙여 넣기 전에 번들해서 한 파일로 모으세요npx @redocly/cli bundle openapi.yaml -o bundled.yaml 이나 npx swagger-cli bundle openapi.yaml -o bundled.json -r 로 외부 참조가 모두 내부에 펼쳐집니다. 이는 CI 에 넣을 가치가 있는 공정이며 번들이 실패한다 = 참조가 깨져 있다는 뜻이므로 사양의 링크 끊김 검사를 겸할 수 있습니다. allOf 를 많이 쓰는 사양이라면 번들에 더해 --dereferenced 옵션으로 완전히 펼쳐 버리면 생성되는 본문이 실제로 보내야 할 형태에 가까워집니다.
생성한 명령이 400 이나 422 로 튕긴다 example 이 쓰여 있지 않은 속성은 타입에서 기계적으로 채울 수밖에 없습니다 — 문자열이면 "string", 숫자면 0 같은 식입니다. 그런데 실제 API 는 status"active""archived" 밖에 받지 않는다거나 created_atdate-time 형식이어야 한다거나 하는 제약을 갖고 있습니다. 즉 400 이 돌아오는 것은 대개 도구의 결함이 아니라 사양에 예가 쓰여 있지 않다는 것의 표현입니다. enum 이나 format 이 있으면 읽어낼 수 있지만 다른 필드와 모순되지 않는 값 까지는 사양에 쓸 수 없으므로 원리적으로 채울 수 없습니다. 사양에 example 을 써 넣는 것이 올바른 고치는 방법입니다 — 고친 만큼 Swagger UI 의 샘플에도 목 서버의 응답에도 생성되는 클라이언트의 테스트에도 효과가 있습니다. 이 작업은 도구를 통과시키기 위한 것이 아니라 API 문서로서의 품질 개선 그 자체입니다. 인증은 사양에 쓰여 있지 않은 경우가 많으므로 이 페이지의 인증 헤더 칸에서 덮어쓰세요. 401 이 돌아오면 인증, 400 / 422 가 돌아오면 본문의 내용으로 나눠 볼 수 있습니다. curl -v 를 붙여 실제로 보내고 있는 헤더를 보는 것이 어느 쪽인지 판별하는 가장 짧은 방법입니다.
붙여 넣어도 한 건도 생성되지 않는다 맨 앞이 swagger: "2.0" 으로 되어 있지 않습니까. Swagger 2.0 은 OpenAPI 3.x 와는 구조가 다른 별개의 사양입니다 — 서버 지정이 servers 가 아니라 host + basePath + schemes 세 가지로 나뉘고 요청 본문이 requestBody 가 아니라 parameters 안의 in: body, 미디어 타입이 content 가 아니라 경로 밖의 consumes 에 있습니다. 버전 번호가 다를 뿐 이 아니라 읽어야 할 곳이 전부 다릅니다. 또 하나 많은 것이 YAML 의 들여쓰기 붕괴입니다 — 탭 문자가 섞여 있으면 YAML 은 반드시 실패합니다. 먼저 3.x 로 변환하세요npx swagger2openapi swagger.yaml -o openapi.yaml 이 그대로의 변환이며 기존 기술은 거의 기계적으로 옮길 수 있습니다. Swagger 2.0 은 2017 년에 3.0 이 나온 이후 줄곧 유지보수 모드이므로 이 변환은 늦든 빠르든 필요해지는 작업입니다. YAML 이 원인인지 여부는 JSON 으로 변환해 다시 붙여 넣으면 한 번에 나눌 수 있습니다(YAML ⇔ JSON 변환). JSON 으로 하면 통한다면 들여쓰기 문제, JSON 으로도 통하지 않는다면 사양의 버전이나 구조 문제입니다.

생성한 명령을 그대로 남에게 건네지 마세요. 인증 헤더를 덮어쓰면 출력되는 모든 명령에 진짜 토큰이 평문으로 박힙니다 — Slack 에 붙이는 것도 이슈에 붙이는 것도 문서에 싣는 것도 모두 인증 정보의 유출입니다. 공유할 용도라면 -H "Authorization: Bearer $API_TOKEN" 처럼 환경 변수로 바꾼 뒤 건네세요. 자기 단말에서 실행하는 경우에도 명령 전체가 셸의 기록 파일에 평문으로 남습니다(맨 앞에 공백을 하나 넣으면 많은 셸에서는 기록에 남지 않습니다). 한 가지 더, servers/api/v1 같은 상대 URL 뿐인 사양에서는 호스트가 정해지지 않으므로 명령은 그대로는 동작하지 않습니다 — 이 페이지의 베이스 URL 덮어쓰기 칸에서 보충하세요.

📖 사용법

  1. 1
    OpenAPI 사양 붙여넣기
    YAML 또는 JSON 형식의 OpenAPI 3.x 사양을 붙여넣으세요.
  2. 2
    옵션 설정
    필요시 베이스 URL이나 Authorization 헤더를 덮어쓰고, 출력 스타일을 선택할 수 있습니다.
  3. 3
    cURL 명령 복사
    모든 엔드포인트가 카드로 표시되며, 각 복사 버튼으로 클립보드에 복사할 수 있습니다.

❓ 자주 묻는 질문

Swagger 2.0도 지원하나요?
OpenAPI 3.x를 주로 지원합니다. Swagger 2.0의 기본 path/method는 동작하지만 $ref 해석은 일부만 지원합니다.
요청 본문은 어떻게 채워지나요?
requestBody example, 각 속성의 example / default를 우선 사용하고, 없으면 타입에 맞는 샘플 값을 생성합니다.
생성된 명령을 그대로 실행할 수 있나요?
샘플 값과 플레이스홀더 토큰이 포함되므로, 실행 전에 실제 값으로 교체하세요.
🐛 이 도구에서 문제가 발생했나요?

무료 · 가입 불필요. 재현 절차만이라도 도움이 됩니다. 보고는 운영자에게 직접 전달되어 개선에 사용됩니다.

※ 재현을 위해 브라우저 정보 (UA / 화면 / 언어 / URL) 가 자동 전송됩니다