api 문서화 ContentType formData? json?
백엔드에서는 알아서 파일로 변환해서 전달해준다. 그런데 프론트에서는 어떻게 전달하라고 API 문서를 구성해야 하지?
지금은 파일을 전달받을 때는 ContentType: formData
로 설정해뒀고.
파일이 없을 때는 ContentType: application/json
으로 설정해뒀다.
입력 방식이 두가지로 나뉘는 게 맘에 들지 않는다. 한가지로 입력 타입을 통일하는게 더 나은 것인지 분리시켜놔도 좋은지 알아보자.
"Content Type"
The Content-Type entity header is used to indicate the media type of the resource. - MDN web docs
어떤 데이터를 보내는지 알려주는 용도라고 한다.
모두 application/json
으로 설정해두고 json 형식으로 바꿔서 전달하게 한다. 구글에 검색하면 (change formdata to json)
// example
const formData = new FormData(SomeFormElement).entries();
let jsonObject = {};
for (const [key, value] of formData) {
jsonObject[key] = value;
}
모두 application/json으로 설정해두고 알아서 json형식으로 전달하라고 문서화해두어도 괜찮다고 본다.
사실 백엔드에서 json, formdata 둘다 받을 준비가 되어있다. body parser를 세팅해두었으니 말이다. json으로 들어오면 ctx.request.body
로, formdata를 통해 파일이 들어오면 ctx.request.files
로 서버에 전달된다.
내가 쓰는 현재 쓰고 있는 body parser는 koa-body이다.
A full-featured koa body parser middleware. Supports multipart, urlencoded, and json request bodies. Provides the same functionality as Express's bodyParser - multer.
잘 받아주니 formData, json 두가지로 body를 받는 것은 아무 문제없어보인다.
다시 Content Type의 목적을 생각해보면 "어떤 데이터가 전달되는지 알려주는 것"이므로 formData
와 application/json
두가지를 이용해도 아무 문제없어보인다. 혹은 API 이용자에게 더 명확하다.