서버 관련한 공부를 하던 중 정확하게 알지 못해 어영부영 알고 있었던 것들을 정확하게 정리하고자 한다.
Request.body(본문)
본문은 요청의 마지막 부분에 들어간다. 모든 요청에 본문이 들어가지는 않는다. GET, HEAD, DELETE , OPTIONS처럼 단순히 리소스를 가져오는 요청은 보통 본문이 필요가 없어서 없는 경우가 대다수이다. 업데이트를 하기 위한 요청(POST, PUT)을 할 때 본문을 작성하여 서버에 데이터를 전송한다. 보통 (HTML 폼 데이터를 포함하는) POST 요청일 경우에 많이 사용된다.
XML, JSON, Multi form 등의 데이터를 담고있다. 주소에서 확인할 수 없다. 본문에 어떤 내용이 담겨있는지 확인하고 싶을 때는 개발자 도구를 통해 확인하면 된다. 일반적으로 본문은 서버에 업로드 하거나 다운로드 할 때 사용된다. 예를 들어 내가 어떤 파일을 이름과 mime type을 정해서 업로드 할 때 body에 태워서 요청하는 것이다.
Request.query
?id=1, ?/type=post&returnURL
쿼리스트링은 일반적으로 이름 - 값의 쌍으로 이루어진 컬렉션이고 옵션이다. 쿼리스트링의 특징은 물음표(?) 기호로 시작한다. 이름-값 쌍은 각각 엠퍼샌드(&)로 구분을 한다. &로 연결하여 여러 개의 데이터를 넘길 수 있다. 이름과 값은 모두 URL 인코드를 사용해야 한다. 자바스크립트에서는 이 목적을 위해 내장함수 encodeURLComponent가 존재한다. 퀴리스트링을 검색 문자열(search string) 혹은 서치(search)라고 부르기도 한다.
주소 바깥 ? 이후의 변수를 담는다. 예를 들어보면, 만일 서버 상에 req.query가 무엇인지 확인하고자 했을 때, 아래 URL에서는
https://newfind.tistory.com/newpost/?check=returnURL
? 이후 check라는 매개변수(parameter)의 값인(arguments) returnURL을 가져온다. 즉 객체를 확인해보면, 아래와 같이 구성되어 있는 것이다. 서버에서는 Request.query를 Query.parameter라고 칭한다.
request.query = {check: returnURL}
encodeURLComponent 작동 방식
==> 스페이스는 + 기호로 변환, 다른 특스 문자들은 숫자형 문자 참조로 변환, 쿼리스트링을 검색 문자열
Request.param
Path Variable 는 이름에서도 알 수 있듯이 경로를 변수로서 사용한다. 각각의 게시물을 보기 위해서는 게시물의 id를 서버에 넘겨줘서 사용한다. Path Variable 를 사용하면 다음과 같이 나타냅니다.
https://newfind.tistory.com/newpost/80
위의 링크로 예로 들면, returnURL을 담는 것이다. 서버에서는 Path Variable로 칭한다.
request.params = {returnURL}
Path Variable vs Query parameter
어떤 구체적인 resource를 식별해야 하는 상황에서는 Path variable을 사용하는 것이 좋다.
예를 들면 newfind.tistory.com/80을 요청하면 id가 80인 게시글만 가져오는 것이다.
# id가 80인 게시글을 가져온다.
newfind.tistory.com/80
Query parameter는 리소스들을 정렬하거나 필터일 할 때 사용하는 것이 좋다. 구성 자체가 키-값 쌍으로 이루어져 있기에 필터링을 하거나 정렬을 하는데 더욱 유리하다.
# writer가 happydrum인 게시글들을 가져옵니다.
/newfind/list?writer=happydrum
Query string(Path variable, Queryparameter) vs body
REST API Best practices: args in query string vs in request body
A REST API can have arguments in several places: In the request body - As part of a json body, or other MIME type In the query string - e.g. /api/resource?p1=v1&p2=v2 As part of the URL-path -...
stackoverflow.com
'개발 R.I.P.' 카테고리의 다른 글
8.26 Dev.Feedback (SQL) (0) | 2021.08.26 |
---|---|
8.24 Dev.Feedback (시간 복잡도) (0) | 2021.08.24 |
8.05 Dev.Feedback (스프린트 Test Server, Client 작동) (0) | 2021.08.05 |
8.03 Dev.Feedback (Package.json) (0) | 2021.08.03 |
8.02 Dev.Feedback (OSI 7Layers & 1,2Layers) (0) | 2021.08.02 |