🌐 OpenAPI → cURL 명령 생성
OpenAPI 3.x YAML / JSON 사양을 붙여넣으면 모든 엔드포인트를 실행 가능한 cURL 명령으로 일괄 변환.
생성된 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_at 은 date-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
OpenAPI 사양 붙여넣기YAML 또는 JSON 형식의 OpenAPI 3.x 사양을 붙여넣으세요.
-
2
옵션 설정필요시 베이스 URL이나 Authorization 헤더를 덮어쓰고, 출력 스타일을 선택할 수 있습니다.
-
3
cURL 명령 복사모든 엔드포인트가 카드로 표시되며, 각 복사 버튼으로 클립보드에 복사할 수 있습니다.
❓ 자주 묻는 질문
Swagger 2.0도 지원하나요?
요청 본문은 어떻게 채워지나요?
생성된 명령을 그대로 실행할 수 있나요?
🐛 이 도구에서 문제가 발생했나요?
무료 · 가입 불필요. 재현 절차만이라도 도움이 됩니다. 보고는 운영자에게 직접 전달되어 개선에 사용됩니다.
보고 감사합니다!
운영자에게 전달되었습니다. 개선에 사용됩니다.