Playwright 테스트에서 API 응답 검증 방법

Ashley Innocent

Ashley Innocent

12 May 2026

Playwright 테스트에서 API 응답 검증 방법

Playwright 테스트는 통과합니다. 로그인 버튼이 클릭되고, 대시보드가 렌더링되며, 차트가 그려집니다. 그런데 고객이 차트 숫자가 잘못되었다는 버그를 보고합니다. 조사를 해보니 API가 잘못된 페이로드와 함께 200 상태를 반환했고, 엔드투엔드 스위트는 화면에 픽셀이 나타나는지만 확인했기 때문에 이를 전혀 알아차리지 못했습니다. 이것이 브라우저 테스트만으로는 메울 수 없는 간극이며, API 단언(assertion)이 필수 불가결해지는 지점입니다. Apidog와 같은 도구는 UI 플로우에 부여하는 것과 동일한 엄격함으로 API 계약, 스키마 및 응답 의미를 검증하는 방법을 제공하며, 두 스위트를 CI에서 함께 실행할 수 있게 합니다.

버튼

요약

Playwright의 request 픽스처와 page.route 인터셉터를 동일한 OpenAPI 사양을 사용하는 Apidog 시나리오와 결합하여 Playwright 테스트에서 API를 검증할 수 있습니다. 단일 사양 파일을 통해 픽스처를 공유하고, 두 계층에서 응답 스키마를 단언하며, CI에서 두 스위트를 하나의 작업으로 실행하여 계약 변경이 어느 한 곳에서든 빠르게 실패하도록 할 수 있습니다.

소개

Playwright는 2026년 많은 팀에서 기본 브라우저 자동화 프레임워크로 사용되며, Playwright 문서는 API 테스트를 쉽게 보이게 합니다: 몇 번의 request.get 호출, expect(response.status()).toBe(200)이면 끝나는 것처럼 보입니다. 문제는 이를 확장할 때 시작됩니다. 결국 상태 코드만 확인하고 응답 형태는 확인하지 않는 수백 개의 테스트, 브라우저 플로우와 API 플로우 간의 공유된 단일 진실 소스(source of truth) 부재, 그리고 백엔드가 느리거나 고장 났을 때 오프라인으로 API를 모의(mock)할 방법이 없는 상황에 처하게 됩니다.

해결책은 간단합니다. OpenAPI 사양을 계약으로 취급하고, 해당 계약에서 Playwright request 호출과 page.route 인터셉터를 구동하며, 동일한 사양에 대해 Apidog 시나리오 스위트를 실행하여 심층적인 스키마, 비즈니스 로직 및 연쇄 요청 유효성 검사를 수행합니다. 이를 통해 CI에서 빠른 피드백, 프론트엔드 및 백엔드 테스트 간의 명확한 소유권 경계, 그리고 중복되는 픽스처가 없다는 이점을 얻을 수 있습니다. 도구를 먼저 설치하려면 Apidog 다운로드를 클릭하여 설치한 후 돌아오십시오; 아래 단계는 Apidog가 로컬에 설치되어 있다고 가정합니다.

이 게시물을 통해 얻게 될 내용은 다음과 같습니다: Playwright 스위트에서 API 단언이 속해야 할 위치에 대한 명확한 정신적 모델, 작동하는 request.fixture 패턴, Playwright와 Apidog 간에 픽스처를 공유하기 위한 단계별 설정, CI 및 모킹을 위한 고급 팁, 그리고 주요 대안에 대한 비교표입니다. 테스트 도구 선택에 대한 더 넓은 맥락을 보려면 QA 엔지니어를 위한 API 테스트 도구에 대한 우리의 견해를 참조하십시오.

Playwright 테스트와 API 단언(assertion) 간의 간극

일반적인 Playwright 테스트는 로그인하고, 페이지로 이동하며, 특정 UI 요소가 보이는지 단언합니다. 이는 사용자에게 보이는 플로우가 작동한다는 것을 알려줍니다. 하지만 그 뒤에 있는 API에 대해서는 아무것도 알려주지 않습니다. 다음 세 가지 실패 모드가 간과될 수 있습니다:

첫째, 페이로드 형태 회귀. 엔드포인트가 total_count에서 totalCount로 필드 이름이 변경된 상태로 200을 반환합니다. UI는 묵묵히 데이터를 강제로 변환하거나 0을 표시할 수 있습니다. Playwright 테스트는 화면에 숫자가 보이는 것을 보고 통과합니다.

둘째, 비즈니스 로직 이탈. 할인 엔드포인트가 계약된 15% 대신 10% 할인을 적용합니다. UI는 API가 반환하는 내용을 그대로 보여주므로 테스트는 통과합니다. 오직 재무팀만이 몇 주 후에 이를 알아차립니다.

셋째, 오류 경로 커버리지. Playwright 테스트는 거의 항상 해피 패스(happy path)를 실행합니다. API에는 수십 개의 4xx 및 5xx 분기(branch)가 있습니다: 속도 제한, 만료된 토큰, 부분 실패, 멱등성(idempotency) 충돌 등. 별도의 API 테스트 스위트를 작성하지 않으면 이러한 경우 중 어느 것도 실행되지 않습니다.

Playwright 사양 내에 request.get 호출을 추가하고 응답 본문을 단언함으로써 이러한 문제의 일부를 해결할 수 있습니다. 이는 몇몇 엔드포인트에는 작동합니다. 하지만 200개의 엔드포인트가 있고 "주문 생성, 주문 가져오기, 주문 취소, 환불 웹훅 검증"과 같은 연쇄 시나리오를 원할 때는 무너집니다. Playwright는 주로 브라우저 자동화 프레임워크입니다; 상태 저장 API 워크플로우나 스키마 수준 단언의 인체공학적(ergonomics) 설계에 적합하지 않습니다. 바로 이 지점에서 전용 API 테스트 도구가 그 가치를 발휘합니다.

올바른 분할은 다음과 같습니다:

두 스위트는 동일한 OpenAPI 사양을 사용하므로 두 가지 버전의 진실을 가질 일이 없습니다. 계약 우선 접근 방식에 대한 더 깊은 이해를 위해, 설계 우선 API 워크플로우에 대한 저희 글이 주변 패턴을 보여줍니다.

이미 Postman을 사용하고 있고 전환을 고려하는 팀을 위해 자체 호스팅 Postman 대안에 대한 글은 마이그레이션 메커니즘을 다룹니다.

Playwright와 Apidog 간에 픽스처를 공유하는 방법

단일 진실 소스는 일반적으로 저장소(repo) 루트에 있는 openapi.yaml 또는 openapi.json 파일인 OpenAPI 사양입니다. Playwright는 타입이 지정된 요청 헬퍼와 예시 페이로드를 위해 이를 읽습니다; Apidog는 시나리오 단계를 채우기 위해 이를 직접 가져옵니다. 백엔드에서 계약 변경 사항이 발생할 때마다 두 스위트 모두 이를 반영합니다.

재사용 가능한 테스트 데이터(사용자, 토큰, 샘플 페이로드)를 담는 fixtures/ 폴더로 시작하십시오. 이를 로드하고 테스트에 노출하는 Playwright 픽스처 파일을 만드십시오:

// tests/fixtures/api.ts
import { test as base, APIRequestContext, expect } from '@playwright/test';
import { readFileSync } from 'fs';
import path from 'path';

type ApiFixtures = {
  apiRequest: APIRequestContext;
  authToken: string;
  sampleOrder: Record<string, unknown>;
};

export const test = base.extend<ApiFixtures>({
  apiRequest: async ({ playwright }, use) => {
    const ctx = await playwright.request.newContext({
      baseURL: process.env.API_BASE_URL ?? 'https://api.staging.example.com',
      extraHTTPHeaders: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
    });
    await use(ctx);
    await ctx.dispose();
  },

  authToken: async ({ apiRequest }, use) => {
    const res = await apiRequest.post('/auth/token', {
      data: { email: 'qa@example.com', password: process.env.QA_PASSWORD },
    });
    expect(res.status()).toBe(200);
    const body = await res.json();
    await use(body.access_token);
  },

  sampleOrder: async ({}, use) => {
    const raw = readFileSync(
      path.join(__dirname, '..', '..', 'fixtures', 'order.json'),
      'utf8',
    );
    await use(JSON.parse(raw));
  },
});

export { expect };

이제 각 사양에서 @playwright/test 대신 이 픽스처 파일에서 test를 가져오면, 타입이 지정된 apiRequest, 새로 생성된 authToken, 그리고 sampleOrder 데이터를 즉시 사용할 수 있습니다. order.json 파일은 Apidog가 시나리오에서 POST /orders에 대한 예시 본문으로 사용하는 것과 동일한 페이로드입니다. 한 번만 편집하면 두 스위트 모두 변경됩니다.

Apidog 측에서는 프로젝트를 열고 "가져오기(Import)"를 클릭한 다음, 동일한 openapi.yaml 파일을 지정합니다. Apidog는 몇 초 만에 엔드포인트, 요청 예시 및 파라미터 스키마를 생성합니다. 그런 다음 픽스처 페이로드를 Apidog의 "환경 변수(Environment Variables)" 또는 "데이터 세트(Data Sets)"로 저장합니다:

// tests/orders.spec.ts
import { test, expect } from './fixtures/api';

test('POST /orders returns a valid order with 15 percent discount', async ({
  apiRequest,
  authToken,
  sampleOrder,
}) => {
  const res = await apiRequest.post('/orders', {
    headers: { Authorization: `Bearer ${authToken}` },
    data: { ...sampleOrder, coupon: 'SAVE15' },
  });

  expect(res.status()).toBe(201);
  const body = await res.json();

  expect(body).toMatchObject({
    id: expect.any(String),
    status: 'pending',
    discount_pct: 15,
    total_cents: expect.any(Number),
  });
  expect(body.total_cents).toBeLessThan(sampleOrder.subtotal_cents);
});

Apidog 내부에서 일치하는 시나리오 단계는 동일한 페이로드를 게시한 다음, openapi.yamlOrder 컴포넌트에 대해 내장된 JSON 스키마 검사를 실행합니다. 이는 모든 필드가 타입 검사되고, 필수 필드가 검증되며, 열거형(enum) 값이 강제되는 심층적인 검증을 제공합니다. Playwright는 높은 가치의 의미론적 단언(discount_pct: 15)을 포착하고; Apidog는 수동으로 단언하는 것을 잊은 필드를 포함하여 모든 변경된 필드를 포착합니다. 사양 기반 테스트가 처음이라면, 설계 우선 API 워크플로우에 대한 저희 안내서가 주변 패턴을 보여줍니다.

이미 Postman을 사용하고 있고 전환을 고려하는 팀을 위해 자체 호스팅 Postman 대안에 대한 글은 마이그레이션 메커니즘을 다룹니다.

Apidog + Playwright 워크플로우 설정

다음은 약 한 시간 만에 무에서부터 이중 스위트 CI를 구축할 수 있는 깔끔하고 반복 가능한 설정입니다.

1단계: 모든 것을 지배하는 하나의 사양. openapi.yaml 파일을 저장소(repo) 루트에 두십시오. 코드로 취급하십시오: PR 검토 필요, 호환성 파괴 변경(breaking changes) 시 메이저 버전 업그레이드가 필요합니다. 아직 사양이 없다면, 프레임워크 플러그인(FastAPI, NestJS 등은 OpenAPI를 기본적으로 내보냄)을 사용하여 기존 경로에서 초안을 생성한 다음 수동으로 편집하십시오. Apidog는 HAR 파일을 가져오면 트래픽으로부터 사양을 역설계할 수도 있습니다.

2단계: Playwright 연결. Playwright를 설치(npm init playwright@latest)하고 위에 표시된 픽스처 파일을 추가하십시오. npm run test:e2e 스크립트와 스테이징 환경을 가리키는 playwright.config.ts 파일을 추가하십시오. 테스트는 작게 유지하십시오; 사양당 하나의 시나리오.

3단계: Apidog 시나리오 계층 추가. Apidog 프로젝트 내에서 openapi.yaml을 가져온 다음, 중요한 사용자 여정별로 시나리오를 만드십시오: 회원가입, 결제, 환불, 웹훅 전달 등. 각 시나리오는 단언이 연쇄적으로 연결된 API 호출의 시퀀스입니다. Apidog는 환경 변수, 사전 요청 스크립트 및 응답 후 단언을 지원합니다. Apidog CLI(apidog-cli run scenario.json)를 통해 시나리오를 CLI에서 실행 가능한 JSON으로 내보내십시오.

4단계: Playwright에서 네트워크 가로채기. UI가 실제 운영 중인 데이터를 사용하고 싶지 않을 때, page.route를 사용하여 가로채고 스텁(stub)하십시오. 스텁된 응답은 동일한 픽스처 파일에서 가져오므로 계약은 일관되게 유지됩니다:

test('dashboard renders cached order list when offline', async ({
  page,
  sampleOrder,
}) => {
  await page.route('**/api/orders', async (route) => {
    await route.fulfill({
      status: 200,
      contentType: 'application/json',
      body: JSON.stringify({ orders: [sampleOrder] }),
    });
  });

  await page.goto('/dashboard');
  await expect(page.getByTestId('order-row')).toHaveCount(1);
});

그런 다음 Apidog에서 동일한 GET /orders 시나리오를 실제 백엔드 또는 Apidog 모의 서버에 대해 실행하십시오. 동일한 픽스처로 두 계층의 검증을 수행합니다.

5단계: CI 통합. 두 스위트를 병렬로 실행하는 GitHub Actions 워크플로우를 추가하십시오:

name: tests
on: [push, pull_request]
jobs:
  playwright:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: '20' }
      - run: npm ci
      - run: npx playwright install --with-deps
      - run: npx playwright test
  apidog:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: '20' }
      - run: npm i -g apidog-cli
      - run: apidog-cli run ./apidog/scenarios/checkout.json --reporters cli,junit

어느 작업이든 실패하면 병합이 차단됩니다. --reporters junit를 사용하여 GitHub가 PR에서 실패한 단언을 인라인으로 주석 처리하도록 하십시오. 이 워크플로우를 확장하려면 GitHub Actions 문서에서 매트릭스 빌드 및 캐싱을 참조하십시오. 전담 QA 기능이 없는 팀을 위해 QA 엔지니어를 위한 API 테스트 도구 안내서는 각 스위트의 소유권을 할당하는 방법을 설명합니다.

6단계: 드리프트(Drift) 감지. 라이브 openapi.yaml을 테스트가 마지막으로 실행되었던 버전과 비교하는 일일 작업을 예약하십시오. 필드 타입이 변경되면, 테스트 실행 전에 해당 차이(diff)로 인해 빌드가 실패합니다. 이는 우리가 서론에서 언급했던 "잘못된 페이로드와 함께 200 OK" 유형의 버그를 잡아냅니다.

고급 기술 및 전문가 팁

기본 설정이 작동된 후 유용한 몇 가지 방법들입니다.

Playwright 트레이스 뷰어 고정. playwright.config.tstrace: 'on-first-retry'를 설정하십시오. CI에서 불안정한 테스트가 실패하면, 네트워크 호출, DOM 스냅샷 및 콘솔 로그의 전체 타임라인을 얻을 수 있습니다. API 측면에서는 apidog-cli --report html과 함께 사용하십시오. 이를 통해 UI가 먼저 고장났는지 또는 API가 변경되었는지 확인할 수 있습니다.

오프라인 실행을 위해 Apidog 모의 서버 사용. Apidog는 한 번의 클릭으로 OpenAPI 사양에서 모의 서버를 실행할 수 있습니다. 백엔드 팀이 배포 중이거나 스테이징 데이터베이스가 재설정될 때 로컬 개발 환경을 이 모의 서버로 지정하십시오. Playwright 스위트는 모의 서버에 대해 성공적으로 실행되고, Apidog 시나리오는 실제 백엔드를 병렬로 검증합니다. 이 패턴에 대한 자세한 내용은 모의(mock)가 핵심인 AI 지원 API 테스트 생성에 대한 저희 글을 참조하십시오.

재시도 횟수를 두 번으로 제한. playwright.config.ts에서 retries: 2를 설정하십시오. 테스트가 통과하기 위해 세 번의 재시도가 필요하다면, 이는 불안정한 테스트이며 실제 문제가 있는 것입니다. retries: 5로 문제를 덮지 마십시오. Apidog 시나리오도 마찬가지입니다: 요청당 최대 retry: 1로 설정하십시오.

스키마 변경(drift) 시 실패. Apidog가 스키마 불일치를 감지하면 기본적으로 0이 아닌 값으로 종료하십시오. 경고를 그냥 넘어가지 마십시오. 부드러운 실패(soft-fail) 기간을 허용해야 한다면, ALLOW_SCHEMA_DRIFT=true와 같은 환경 변수 뒤에 이를 숨기고 PR에 그 이유를 설명하는 주석을 요구하십시오.

우선순위별로 테스트 태그 지정. 상태 저장 플로우에는 Playwright의 test.describe.configure({ mode: 'serial' })을 사용하고, 다른 테스트는 @smoke, @regression, @nightly로 태그를 지정하십시오. 모든 푸시에는 스모크 테스트를, main으로의 PR에는 회귀 테스트를, 전체 Apidog 시나리오 스위트에는 야간(nightly) 테스트를 실행하십시오. 이는 커버리지를 잃지 않고 CI 시간을 절약합니다.

피해야 할 일반적인 실수:

AI로 테스트를 생성하는 팀을 위해 AI 에이전트 API 테스트 방법 가이드는 추가적인 주의가 필요한 비결정론적 사례를 다룹니다.

대안 및 도구 비교

여러 도구 조합이 브라우저 테스트와 함께 API를 검증할 수 있습니다. 주요 옵션들은 다음과 같습니다.

스택 장점 단점 가장 적합한 경우
Playwright 단독 (request 픽스처) 하나의 도구, 빠르고 스위트에 내장됨 얕은 스키마 유효성 검사, 연쇄 시나리오 없음, 약한 오류 경로 커버리지 소규모 팀, 간단한 API
Playwright + Postman 성숙한 Postman 생태계, Newman CLI 두 가지 진실 소스, Postman 컬렉션이 OpenAPI와 동기화되지 않음, 협업에 비용 발생 이미 Postman에 익숙한 팀
Playwright + Apidog 단일 OpenAPI 소스, 스키마 유효성 검사, 모의(mocks), CI용 CLI, 설계 우선 워크플로우 두 가지 도구 학습 필요, 사양 규율 요구 사양 기반의 전체 커버리지 테스트를 원하는 팀
Cypress + cy-api 플러그인 Cypress 사용자에게 익숙함 Cypress는 브라우저 내에서만 실행됨; API 테스트가 제한적임; 플러그인이 덜 세련됨 기존 Cypress 코드베이스
Pact (컨슈머 주도 계약) 서비스 간 강력한 계약 보장 가파른 학습 곡선, 브로커 인프라, UI에 집중하지 않음 많은 내부 API 컨슈머를 가진 마이크로서비스 조직

오래된 SOAP 시대 도구에서 전환하는 경우, SoapUI Groovy 스크립트 대안ReadyAPI 대안에 대한 저희 글이 마이그레이션 경로를 다룹니다. 로컬 우선 워크플로우의 경우 REST 클라이언트 VSCode 확장은 읽어볼 가치가 있습니다.

Playwright + Apidog 조합은 OpenAPI 사양을 가지고 있고, 여러 서비스를 배포하며, 엔지니어당 두 개의 SaaS 좌석 비용을 지불하지 않고도 UI 및 API 회귀를 모두 잡아내는 단일 CI 파이프라인을 원하는 팀에게 유리합니다.

실제 사용 사례

전자상거래 결제. 한 소매팀은 장바구니에서 결제 확인까지의 플로우에 대해 Playwright 테스트를 실행하고, 결제 의도, 사기 확인, 재고 감소 API 체인에 대해 Apidog 시나리오를 실행합니다. 결제 게이트웨이가 응답 필드를 error_code에서 errorCode로 변경했을 때, Apidog는 90초 만에 이를 감지했습니다; Playwright는 일반적인 "결제 실패" 화면을 보여주며 문제 해결에 몇 시간이 걸렸을 것입니다.

차트 데이터가 있는 SaaS 대시보드. B2B 분석 제품은 Playwright 스냅샷으로 UI 렌더링을 검증하고, Apidog를 사용하여 집계 엔드포인트가 올바른 합계, 백분위수 및 시간 구간별 시계열을 반환하는지 단언합니다. p99 지연 시간 엔드포인트가 이상치(outliers)를 묵묵히 삭제하는 버그가 API 계층에서 감지되었습니다; 차트는 정상적으로 보였습니다.

웹훅 기반 워크플로우. 한 핀테크 팀은 사용자 대면 포털에 Playwright를 사용하고, 웹훅 전달, 재시도 로직 및 멱등성(idempotency)에 대해 Apidog 시나리오를 사용합니다. Apidog의 스크립팅은 중복된 웹훅 ID가 거부되는지, 서명이 유효한지, 그리고 최종 일관성(eventual-consistency) 기간이 30초 미만인지 확인합니다.

결론

Playwright는 브라우저 플로우에 탁월합니다. 하지만 심층적인 API 테스트를 위해 만들어진 것은 아닙니다. 이를 Apidog와 함께 사용하면 다음을 얻을 수 있습니다:

결제나 회원가입과 같은 하나의 중요한 여정부터 시작하십시오. Playwright 픽스처를 연결하고, 일치하는 Apidog 시나리오를 구축한 다음, CI에서 둘 다 실행하십시오. 거기서부터 확장해나가십시오. Apidog를 다운로드하고 OpenAPI 사양을 가져오면 오늘 첫 번째 시나리오를 실행할 수 있습니다.

버튼

자주 묻는 질문

Apidog 없이 Playwright 테스트에서 API를 검증할 수 있나요? 네, Playwright의 request 픽스처와 수동 expect 호출을 사용하면 됩니다. 상태 코드와 몇 가지 본문 필드를 다룰 수 있습니다. 하지만 대규모 스키마 유효성 검사, 연쇄 시나리오, 모의(mocks) 및 오류 경로 커버리지의 경우 Apidog와 같은 전용 도구가 더 빠르고 오탐을 줄여줍니다. 장단점을 비교하려면 QA 엔지니어를 위한 API 테스트 도구 비교를 참조하십시오.

이 설정을 사용하려면 OpenAPI 사양이 필요한가요? 모든 이점을 얻으려면 필요합니다. 사양이 없어도 Playwright와 Apidog를 함께 실행할 수 있지만, 공유된 단일 진실 소스를 잃게 되고 두 곳에서 예시 페이로드를 유지 관리해야 합니다. 기존 경로에서 사양을 생성하는 데는 하루나 이틀이 걸립니다.

두 도구 간 인증은 어떻게 처리하나요? beforeAll 단계를 사용하여 인증 엔드포인트에서 새로운 토큰을 가져온 다음, Playwright 픽스처와 Apidog 환경 변수에 저장하십시오. 테스트 실행 시마다 토큰을 갱신하여 오래된 토큰으로 인해 불안정한 테스트가 발생하지 않도록 하십시오.

Apidog 시나리오가 Playwright를 완전히 대체할 수 있나요? 아닙니다. Apidog는 API 워크플로우에 탁월하지만 브라우저를 렌더링하지 않습니다. UI 단언(보이는 텍스트, 레이아웃, 클릭 플로우)을 위해서는 여전히 Playwright가 필요합니다. 두 도구는 다른 영역을 다룹니다.

백엔드에 안정적인 스테이징 환경이 없다면 어떻게 해야 하나요? Apidog의 내장 모의 서버를 사용하십시오. 이 서버는 한 번의 클릭으로 OpenAPI 사양에서 상태 저장 모의(mock)를 실행하고, 사양에 정의된 예시 응답을 반환합니다. Playwright 스위트와 Apidog 시나리오 모두 모의 서버에 대해 성공적으로 실행되며, 스테이징 환경이 정상화되면 실제 백엔드로 다시 전환할 수 있습니다.

스위트가 증가함에 따라 CI를 빠르게 유지하려면 어떻게 해야 하나요? 우선순위별로 테스트에 태그를 지정하고, 모든 푸시에는 @smoke 테스트만 실행하십시오. main으로의 PR 및 야간(nightly) 일정에는 전체 회귀 및 Apidog 시나리오 스위트를 실행하십시오. Playwright는 workers: 4로, Apidog 시나리오는 CLI의 --parallel 플래그를 사용하여 병렬화하십시오.

CI를 위해 Apidog 유료 플랜이 필요한가요? Apidog CLI는 시나리오 실행을 위한 좌석 라이선스 없이 로컬 및 CI에서 실행됩니다. 대규모 도입 전에 현재 가격 정책 페이지를 확인하십시오. 무료 등급은 대부분의 소규모 팀을 포괄합니다.

Apidog에서 API 설계-첫 번째 연습

API를 더 쉽게 구축하고 사용하는 방법을 발견하세요