API를 설계할 때 '나는 과연 param과 query를 적절하게 사용하고 있었던 걸까?' 라는 생각에 공부한 내용을 정리한 글입니다.
경로의 일부로 전달되는 값
을 의미URL의 구조 자체에 포함
되어야 합니다.특정 자원(users, bbs, ...)
을 식별할 때 사용합니다.
http://host/users/[param]
users
에서[param]
의 정보를 호출하는 API URL입니다.
http://host/bbs/:postId
- postId 게시물의 제목, 내용 등 정보를 반환http://host/users/:userName
- userName 유저 a의 id, 성별, 나이 등 정보를 반환http://host/invest/:companyName
- companyName 회사의 주식 정보를 반환http://url/users/:userName/inventory/:inventoryGroupName
- userName 유저의 아이템 인벤토리 중 inventoryGroupName에 속한 아이템 정보를 반환http://host/invest/:region/:company
같이 region에 국가, company에 회사를 적어 더 세부적인 API를 구성할 수 있습니다.?
를 붙여 사용합니다.선택적(optional)
으로 사용 가능합니다.&
를 이용해 붙일 수 있습니다.
http://host/users?age=25&gender=male
users에서 나이는
25살
이면서 성별이남성
인 유저의 데이터만 호출하는 API URL입니다.
http://host/bbs?sort=ascend
- 게시판의 정렬 방식을 오름차순으로 정렬된 게시판의 게시물을 반환http://host/invest/:region?type=Chemical
- region 국가의 회사 중 화학 종목의 주식 정보만 반환http://host/characters?class=warrior&upperLevel=30&upperGold=100000
- 캐릭터 중 전사 계열, 30레벨 이상, 100,000 이상의 골드를 소유한 캐릭터만 반환특징 | Param | Query |
---|---|---|
위치 | URL 내에 위치 | URL의 끝에 위치 |
목적 | 특정 지원 식별 | 필터링, 자원에 대한 옵션 등 |
필수 여부 | o | x |
중복 여부 | URL 내에서 여러개의 파라미터 사용 가능 | 여러개의 쿼리 파라미터 사용 가능 |
URL 길이 제한이 없습니다.
클라이언트가 서버로 보내는 URL의 모든 정보는 텍스트 형식
이기 때문에 API 서버에서 type validation이 필요합니다.