formData? or json? api documentation

moongq·2021년 2월 6일
0

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

어떤 데이터를 보내는지 알려주는 용도라고 한다.

후보 1_ json으로 바꿔서 보내게 한다?

모두 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형식으로 전달하라고 문서화해두어도 괜찮다고 본다.

후보 2_ 백엔드에서는 알아서 잘 받으니 상관없다?

사실 백엔드에서 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의 목적을 생각해보면 "어떤 데이터가 전달되는지 알려주는 것"이므로 formDataapplication/json 두가지를 이용해도 아무 문제없어보인다. 혹은 API 이용자에게 더 명확하다.

profile
https://medium.com/nodejs-server

0개의 댓글