### API 호출해보기
- 한국영화진흥위원회의 오픈 API(https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do)를 활용합니다.
- Postman 앱(https://www.postman.com)을 통해 영화목록 API를 호출하여 결과를 확인해봅니다 (GET 메서드 활용)
```swift
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<movieListResult>
<totCnt>96281</totCnt>
<movieList>
<movie>
<movieCd>20232832</movieCd>
<movieNm>교전</movieNm>
<movieNmEn>Ambush</movieNmEn>
<prdtYear>2023</prdtYear>
<openDt></openDt>
<typeNm>장편</typeNm>
<prdtStatNm>개봉예정</prdtStatNm>
<nationAlt>미국</nationAlt>
<genreAlt>전쟁,액션</genreAlt>
<repNationNm>미국</repNationNm>
<repGenreNm>전쟁</repGenreNm>
<directors/>
<companys/>
</movie>
```
- API 문서에 표시된 다양한 매개변수를 적용하여 호출 결과를 확인해봅니다
- Postman이 우리를 대신해서 만들어준 URL의 모습은 결과적으로 어떘나요?
- URL에서 매개변수는 어떻게 표현하나요?
- `?key=fb92260b76d9959bbf3ab69c991d8985`
### Request - HTTP 요청의 핵심요소에 대해서 알아봅시다.
`method`
- GET 은 언제 어떻게 사용하나요?
- When: 정보를 조회할 때
- How: <img src = "https://hackmd.io/_uploads/BJvEWPG9h.png" width = "100">
- POST 는 언제 어떻게 사용하나요?
- When: 새로운 Resource를 저장/등록할 때
- How: <img src = "https://hackmd.io/_uploads/HJFYWPMq2.png" width = "100">
- PUT 은 언제 어떻게 사용하나요?
- When: Resource를 재등록 및 수정할 때
- How: <img src = "https://hackmd.io/_uploads/ryx3WwGc3.png" width = "100">
- PATCH 는 언제 어떻게 사용하나요?
- When: 데이터를 갱신할 때
- How: <img src = "https://hackmd.io/_uploads/r130WPz52.png" width = "100">
- DELETE 는 언제 어떻게 사용하나요?
- When: Resource를 삭제할 때
- How: <img src = "https://hackmd.io/_uploads/HyqWGvM9n.png" width = "100">
위의 질문들을 올바르게 살펴봤다면, 아래의 내용들이 무엇인지 설명할 수 있습니다.
- request-query
주소 바깥 ? 이후에 변수를 담을 수 있습니다.
ex) `http://www.kobis.or.kr/kobisopenapi/webservice/rest/movie/searchMovieList.xml?key=fb92260b76d9959bbf3ab69c991d8985`
- request-body(payload)
JSON, XML등의 데이터를 담습니다. 주소에서는 확인할 수 없습니다.
- header
- Content-Type 은 무엇인가요?
보내는 자원의 형식을 명시하기 위해 Header에 실리는 정보입니다.(mime-type)
- 파일을 전송할때 주로 사용하는 Content-Type 은 무엇인가요?
Content-Type: application/msword <-- doc
Content-Type: application/pdf <-- pdf
Content-Type: application/vnd.ms-excel <-- xls
Content-Type: application/x-javascript <-- js
Content-Type: application/zip <-- zip
Content-Type: image/jpeg <-- jpeg, jpg, jpe
Content-Type: text/css <-- css
Content-Type: text/html <-- html, htm
Content-Type: text/plain <-- txt
Content-Type: text/xml <-- xml
Content-Type: text/xsl <-- xsl
### Response - HTTP 응답의 핵심요소에 대해서 알아봅시다.
`HTTP Status`
- 200, 201 , 202, 204 상태 코드가 각각 무엇을 의미하는지 알아봅시다.
- 200
- m: OK
- d: 오류 없이 전송 성공
- 201
- m: Created
- d: 요청이 성공. 리소스가 생성됨
- 202
- m: Accepted
- d: 서버가 클라이언트의 요청을 수락함
- 204
- m: Non Content
- d: 클라이언트의 요구를 처리했으나 전송할 데이터가 없음
- 400 , 401 , 403 , 404 , 406 상태 코드가 각각 무엇을 의미하는지 알아봅시다.
- 400
- m: Bad Request
- d: 요청 실패. 문법상 오류가 있어서 서버가 요청사항을 이해하지 못함
- 401
- m: Unauthorized
- d: 권한 없음. 요청된 리소스에 대한 유효한 인증 자격 증명이 없기 때문에 클라이언트 요청이 완료되지 않음
- 403
- m: Forbidden
- d: 금지
- 404
- m: Not Found
- d: 문서를 찾을 수 없음. 서버가 요청한 파일이나 스크립트를 찾지 못함.
- 406
- m: Not Acceptable
- d: 받아들일 수 없음
- 500 , 502 , 504 상태 코드가 각각 무엇을 의미하는지 알아봅시다.
- 500
- m: Internal Server Error
- d: 서버 내부 오류
- 502
- m: Bad gateway
- d: 게이트웨이 상태 나쁨
- 504
- m: Gateway timeout
- d: 프록시나 게이트웨이의 역할을 하는 서버에서 볼 수 있음. 초기 서버가 원격 서버로부터 응답을 받을 수 없음. (HTTP 1.1에서 새로 등장)
위의 질문들을 올바르게 살펴봤다면, 아래의 내용들이 무엇인지 설명할 수 있습니다.
- 가장 기본적인 성공 요청 응답의 status 코드는 무엇일까요?
- 200
- 인증 또는 권한 등의 오류에 대해서 주로 사용되는 status 코드는 무엇일까요?
- 400
- 잘못된 접근, 존재하지 않는 경로에 대한 접근에 주로사용되는 status 코드는 무엇일까요?
- 4xx
- 서버측 오류에 대해서 주로 사용되는 status 코드는 무엇일까요?
- 5xx
- status 를 통해서 얻을수 있는 이점은 무엇일까요?
- 상태 코드만 확인하더라도 클라이언트가 서버로 보낸 요청에 대한 응답이 성공인지 실패인지 또한, 구체적으로 어떤 성공인지 어떤 실패인지를 자세히 알 수 있다.
### URL / URI
URL 과 URI에 대해서 알아봅시다.
- URI(Uniform Resource Indenitfier) - 통합 자원 식별자
인터넷 상의 리소스 "자원 자체"를 식별하는 고유한 문자열 시퀀스입니다.
리소스의 이름만을 나타냄
ex) elancer.co.kr
- URL(Uniform Resource Locator) - 식별자 + 위치
네트워크 상에서 통합 자원의 위치를 나타내기위한 규약입니다.
웹사이트 주소 + 컴퓨터네트워크 상의자원
리소스의 이름 뿐만아니라 접근할 수 있는 위치까지 함께 나타냄(https 프로토콜 포함)
ex) https://elancer.co.kr