# HTTP 활동학습
## API 호출해보기
* 한국영화진흥위원회의 오픈 API(https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do)를 활용합니다.
* Postman 앱(https://www.postman.com)을 통해 영화목록 API를 호출하여 결과를 확인해봅니다 (GET 메서드 활용)
* API 문서에 표시된 다양한 매개변수를 적용하여 호출 결과를 확인해봅니다
* Postman이 우리를 대신해서 만들어준 URL의 모습은 결과적으로 어떘나요?
http://www.kobis.or.kr/kobisopenapi/webservice/rest/movie/searchMovieList.xml?directorNm=봉준호&key=d975f8608af0d9e5a16e79768ca97127
* URL에서 매개변수는 어떻게 표현하나요?
스위프트의 옵셔널처럼 기본 요청 URL뒤에 ?를 붙인 뒤 Param의 `key = value(string)`로 표현하고 연속되는 Param이 있을 경우 `&`으로 연결하여 나타난다.
## Request - HTTP 요청의 핵심요소에 대해서 알아봅시다.
### method
- GET 은 언제 어떻게 사용하나요?
- 서버로부터 데이터를 취득
- POST 는 언제 어떻게 사용하나요?
- 서버에 데이터를 추가, 작성 등
- PUT 은 언제 어떻게 사용하나요?
- 서버의 데이터를 갱신, 작성 등
- PATCH 는 언제 어떻게 사용하나요?
- 리소스의 일부를 수정
- DELETE 는 언제 어떻게 사용하나요?
- 서버의 데이터를 삭제
위의 질문들을 올바르게 살펴봤다면, 아래의 내용들이 무엇인지 설명할 수 있습니다.
- request-query
- key = value로 이루어져 있고 &로 연결할 수 있다
- 일정 조건을 줘서 원하는 결과물을 얻을 수 있다(filtering, sorting, searching에 적절)
- request-body(payload)
- URL에는 보이지 않는 오브젝트 데이터
- header
- Content-Type 은 무엇인가요?
- HTTP 통신에서 전송되는 데이터의 타입을 나타내는 header정보 중 하나
- Content-Type에 따라 데이터를 받는 측에서는 데이터를 어떻게 처리해야 할 지 판단
- 파일을 전송할때 주로 사용하는 Content-Type 은 무엇인가요
- multipart/form-data
## Response - HTTP 응답의 핵심요소에 대해서 알아봅시다.
HTTP Status
- 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 : 문서를 찾을 수 없는 상태. 서버가 요청한 파일이나 스크립트를 찾지 못함.
- 406 : 요청을 받아들일 수 없는 상태.
- 500 , 502 , 504 상태 코드가 각각 무엇을 의미하는지 알아봅시다.
- 500 : Internal Server Error - 서버 내부 오류
- 502 : Bad gateway - 게이트웨이 상태 나쁨
- 504 : Gateway timeout - 프록시나 게이트웨이의 역할을 하는 서버에서 볼 수 있으며, 초기 서버가 원경 서버로부터 응답을 받을 수 없음
위의 질문들을 올바르게 살펴봤다면, 아래의 내용들이 무엇인지 설명할 수 있습니다.
- 가장 기본적인 성공 요청 응답의 status 코드는 무엇일까요?
- 200
- 인증 또는 권한등의 오류에 대해서 주로 사용되는 status 코드는 무엇일까요?
- 401
- 잘못된 접근, 존재하지 않는 경로에 대한 접근에 주로사용되는 status 코드는 무엇일까요?
- 404
- 서버측 오류에 대해서 주로 사용되는 status 코드는 무엇일까요?
- 5XX
- status 를 통해서 얻을수 있는 이점은 무엇일까요?
- 요청에 대한 응답의 결과를 쉽게 확인할 수 있다.
## URL / URI
URL 과 URI에 대해서 알아봅시다.
### URL
Uniform Resource Locator(파일 식별자). 통합 자원의 **위치**를 나타내는 규약.
식별자 + 위치
접속하려면 프로토콜이 필요하다.
### URI
Uniform Resource Identifier(통합 자원 식별자). 인터넷 상의 리소스 **자원 자체**를 식별하는 고유한 문자열.
식별자

[참고 블로그 - 이랜서 URI, URL 차이점](https://www.elancer.co.kr/blog/view?seq=74)
[참고 블로그 - Inpa Dev, URL / URI / URN](https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-URL-URI-%EC%B0%A8%EC%9D%B4)