### 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