요청 본문에 JSON을 담아 POST로 새 리소스를 생성하는 레시피입니다. 성공 시 보통 201 Created와 생성된 리소스를 돌려받습니다.
요청 본문에 JSON을 담아 POST로 새 리소스를 생성하는 레시피입니다. 성공 시 보통 201 Created와 생성된 리소스를 돌려받습니다.
curl -X POST https://api.example.com/users \
-H 'Content-Type: application/json' \
-d '{"name":"Ada","email":"ada@example.com"}'const res = await fetch('https://api.example.com/users', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name: 'Ada', email: 'ada@example.com' })
});
const created = await res.json();import requests
res = requests.post('https://api.example.com/users',
json={'name': 'Ada', 'email': 'ada@example.com'})
res.raise_for_status()
created = res.json()`Content-Type: application/json`을 반드시 붙여야 서버가 본문을 JSON으로 파싱합니다. 이 헤더가 없으면 많은 프레임워크가 본문을 폼 데이터로 오해해 빈 객체로 처리합니다.
curl에서 `-d`는 자동으로 메서드를 POST로 만들고 `application/x-www-form-urlencoded`를 기본 Content-Type으로 쓰므로, JSON을 보낼 때는 위처럼 `-H`로 Content-Type을 덮어써야 합니다. `requests`의 `json=`은 직렬화와 Content-Type 설정을 한 번에 처리해 줍니다.
POST는 멱등이 아닙니다. 두 번 보내면 리소스가 두 개 생길 수 있으므로, 네트워크 재시도가 필요한 경우 서버가 지원하면 `Idempotency-Key` 헤더를 함께 보내 중복 생성을 방지하세요. 201 응답의 `Location` 헤더에는 새 리소스의 URL이 들어 있습니다.