## API 호출해보기
- 한국영화진흥위원회의 오픈 API(https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do)를 활용합니다.
- Postman 앱(https://www.postman.com)을 통해 영화목록 API를 호출하여 결과를 확인해봅니다 (GET 메서드 활용)
```json
{
"boxOfficeResult": {
"boxofficeType": "일별 박스오피스",
"showRange": "20230312~20230312",
"dailyBoxOfficeList": [
{
"rnum": "1",
"rank": "1",
"rankInten": "0",
"rankOldAndNew": "OLD",
"movieCd": "20226270",
"movieNm": "스즈메의 문단속",
"openDt": "2023-03-08",
"salesAmt": "2894556153",
"salesShare": "60.2",
"salesInten": "-383917464",
"salesChange": "-11.7",
"salesAcc": "10483952072",
"audiCnt": "272619",
"audiInten": "-32728",
"audiChange": "-10.7",
"audiAcc": "972492",
"scrnCnt": "1486",
"showCnt": "6150"
},
// ...
{
"rnum": "10",
"rank": "10",
"rankInten": "0",
"rankOldAndNew": "OLD",
"movieCd": "20230200",
"movieNm": "똑똑똑",
"openDt": "2023-03-08",
"salesAmt": "38634690",
"salesShare": "0.8",
"salesInten": "-5232478",
"salesChange": "-11.9",
"salesAcc": "214863427",
"audiCnt": "3722",
"audiInten": "-545",
"audiChange": "-12.8",
"audiAcc": "21685",
"scrnCnt": "435",
"showCnt": "804"
}
]
}
}
```
- API 문서에 표시된 다양한 매개변수를 적용하여 호출 결과를 확인해봅니다
- Postman이 우리를 대신해서 만들어준 URL의 모습은 결과적으로 어떘나요?
```
http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=Key값&targetDt=yyyy/mm/dd
```
저희는 json 타입으로 요청을해 json 형식의 결과를 받았습니다.
- URL에서 매개변수는 어떻게 표현하나요?
매개변수는 URL의 뒷부분에 `?`이후에 키-값쌍으로 표시 하며, `&`를 통해 여러 매개변수를 입력할 수 있었습니다.
## Request - HTTP 요청의 핵심요소에 대해서 알아봅시다.
- GET 은 언제 어떻게 사용하나요?
URL에 있는 리소스를 받아오고 싶을 때
- POST 는 언제 어떻게 사용하나요?
서버의 리소스를 생성하거나 업데이트 하기위해 사용
- PUT 은 언제 어떻게 사용하나요?
서버에 데이터를 업데이트 한다. 이미 존재하는 데이터를 수정하는 경우 사용
- PATCH 는 언제 어떻게 사용하나요?
리소스의 특정 부분을 수정하기 위해 사용
- DELETE 는 언제 어떻게 사용하나요?
특정 리소스를 삭제하기 위해 사용
- request-query
주소 이후의 `?` 이후의 파라미터를 의미함
위 예제 기준 `key=키값&targetDt=yyyy/mm/dd`이다.
- request-body(payload)
XML, JSON, Multi Form 등의 데이터를 담으며 주소상에선 확인할 수 없다.
- header
헤더는 서버와 클라이언트 간 전송되는 데이터 패킷에 포함되는 정보를 제공한다.
이 정보는 요청 또는 응답의 내용, 크기, 타입 및 기타 유용한 정보를 나타낸다.
- 요청 헤더
: 클라이언트가 서버에게 전송하는 요청에 대한 정보
- 응답 헤더
: 서버가 클라이언트에게 전송하는 요청에 대한 정보
- Content-Type 은 무엇인가요?
> 해당 개체에 포함되는 미디어 타입 정보
>
컨텐츠의 타입(MIME 미디어 타입) 및 문자 인코딩 방식(EUC-KR,UTF-8 등)을 지정한다.
타입 및 서브타입(type/subtype)으로 구성된다.
- 파일을 전송할때 주로 사용하는 Content-Type 은 무엇인가요?
Multipart/related가 기본형태이므로 가장 많이 쓰일것 같다.
## Response - HTTP 응답의 핵심요소에 대해서 알아봅시다.
- 200, 201 , 202, 204 상태 코드가 각각 무엇을 의미하는지 알아봅시다.
- 200(OK) : 오류 없이 전송 성공
- 201(Created) : 성공적으로 요청되었으며 서버가 새 리소스를 작성했다.
- 202(Accepted) : 서버가 클라이언트의 요청을 수락함
- 204(Non Content) : 클라이언트의 요구를 처리했으나 전송할 데이터가 없음
- 400 , 401 , 403 , 404 , 406 상태 코드가 각각 무엇을 의미하는지 알아봅시다.
- 400(Bad Request) : 요청 실패, 문법상 오류가 있어 서버가 요청사항을 이해하지 못함
- 401(Unauthorized) : 권한 없음
- 403(Forbidden) : 서버 요청 거부
- 404(Not Found) : 문서를 찾을 수 없음
- 406(Not Acceptable) : 요청한 컨텐츠 특성으로 응답할 수 없음
- 500 , 502 , 504 상태 코드가 각각 무엇을 의미하는지 알아봅시다.
- 500(Internal Server Error) : 서버 내부 오류
- 502(Bad gateway) : 게이트웨이 상태 나쁨
- 504(Gateway timeout) : 게이트웨이나 프록시 역할을 서버가 하고 있어 제때 요청을 받지 못했다.