# API 호출해보기 - 한국영화진흥위원회의 오픈 API(https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do)를 활용합니다. - Postman 앱(https://www.postman.com)을 통해 영화목록 API를 호출하여 결과를 확인해봅니다 (GET 메서드 활용) - API 문서에 표시된 다양한 매개변수를 적용하여 호출 결과를 확인해봅니다 - Postman이 우리를 대신해서 만들어준 URL의 모습은 결과적으로 어떘나요? ``` { "boxOfficeResult": { "boxofficeType": "일별 박스오피스", "showRange": "20220424~20220424", "dailyBoxOfficeList": [ { "rnum": "1", "rank": "1", "rankInten": "0", "rankOldAndNew": "OLD", "movieCd": "20204845", "movieNm": "공기살인", "openDt": "2022-04-22", "salesAmt": "255961550", "salesShare": "43.1", "salesInten": "-6573970", "salesChange": "-2.5", "salesAcc": "686217030", "audiCnt": "25415", "audiInten": "-661", "audiChange": "-2.5", "audiAcc": "70265", "scrnCnt": "730", "showCnt": "2536" } ] } } ``` - URL에서 매개변수는 어떻게 표현하나요? - key 문자열(필수) 발급받은키 값을 입력합니다. - targetDt 문자열(필수) 조회하고자 하는 날짜를 yyyymmdd 형식으로 입력합니다. - itemPerPage 문자열 결과 ROW 의 개수를 지정합니다.(default : “10”, 최대 : “10“) - multiMovieYn 문자열 다양성 영화/상업영화를 구분지어 조회할 수 있습니다. “Y” : 다양성 영화 “N” : 상업영화 (default : 전체) - repNationCd 문 자열 한국/외국 영화별로 조회할 수 있습니다. “K: : 한국영화 “F” : 외국영화 (default : 전체) - wideAreaCd 문자열 상영지역별로 조회할 수 있으며, 지역코드는 공통코드 조회 서비스에서 “0105000000” 로서 조회된 지역코드입니다. (default : 전체) # Request - HTTP 요청의 핵심요소에 대해서 알아봅시다. `method` - GET 은 언제 어떻게 사용하나요? - GET은 서버로부터 정보를 가져오는 데 사용됩니다. - GET 요청은 주로 서버로부터 특정 정보를 검색하는데 사용됩니다. - POST 는 언제 어떻게 사용하나요? - 요청받은 데이터를 처리하는데 사용됩니다. - POST 요청은 서버에 새로운 데이터를 생성하도록 하는데 사용됩니다. - PUT 은 언제 어떻게 사용하나요? - PUT 요청은 서버의 특정 요소를 새 데이터로 교체하는 데 사용됩니다. - PUT 요청은 리소스의 일부가 아닌 전체를 변경하는 데 사용됩니다. - PATCH 는 언제 어떻게 사용하나요? - 리소스를 부분적으로 변경하는데 사용됩니다. - DELETE 는 언제 어떻게 사용하나요? - 리소스를 삭제할 때 사용됩니다. 위의 질문들을 올바르게 살펴봤다면, 아래의 내용들이 무엇인지 설명할 수 있습니다. - request-query - 주로 GET 요청의 일부로 사용자가 서버에 전송하는 추가 정보를 나타냅니다. 이는 웹 브라우저의 주소 표시줄에서 URL 뒤에 "?" 기호 뒤에 나오는 일련의 파라미터로 볼 수 있습니다. - 각 쿼리 파라미터는 "키=값" 형태로 나타납니다. - 여러 개의 쿼리 파라미터는 "&" 기호로 구분됩니다. - 예를 들어 "http://example.com/search?query=hello&page=2"의 URL에서는 두 개의 쿼리 파라미터("query=hello"와 "page=2")가 포함되어 있습니다. - request-body(payload) - HTTP 요청 메시지에서 실제로 전송하려는 데이터를 포함하는 부분을 가리킵니다. 이 부분은 주로 POST, PUT, PATCH와 같은 HTTP 요청에서 사용됩니다. 이러한 요청들은 서버에 데이터를 생성하거나 수정하거나 추가하는 동작들을 수행하므로, 그러한 동작을 수행하기 위한 데이터가 필요합니다. - Request-body의 데이터 형식은 요청의 "Content-Type" 헤더에 명시됩니다. - header - 해당 request에 대한 추가 정보(addtional information)를 담고 있는 부분입니다. - 예를 들어, request 메세지 body의 총 길이 (Content-Length) - Key:Value 값으로 되어있습니다. - `Content-Type` 은 무엇인가요? - 해당 request가 보내는 메세지 body의 타입. - 예를 들어, JSON을 보내면 application/json이다. - 파일을 전송할때 주로 사용하는 `Content-Type` 은 무엇인가요? - 파일의 종류와 형식에 따라 다릅니다. - 1. 이미지 파일: JPEG의 경우 image/jpeg, PNG의 경우 image/png 등,, - 2. 문서 파일: PDF의 경우 application/pdf, msword의 경우 application/msword - 3. 동영상 및 오디오: MP4의 경우 video/mp4, MP3의 경우 audio/mpeg - 4. 텍스트 파일: 일반 텍스트 파일의 경우: text/plain, HTML: "text/html", CSS: "text/css" - 5. JSON 또는 XML: JSON: application/json, XML: application/xml # Response - HTTP 응답의 핵심요소에 대해서 알아봅시다. `HTTP Status` - 200, 201 , 202, 204 상태 코드가 각각 무엇을 의미하는지 알아봅시다. - **200 OK**: 요청이 성공했음을 나타내는 성공 응답 상태 코드입니다. 200 응답은 기본적으로 캐시 가능합니다. - **201 Created**: 요청이 성공적으로 처리되었으며, 자원이 생성되었음을 나타내는 성공 상태 응답 코드입니다. - **202 Accepted**: 요청이 성공적으로 접수되었으나, 아직 해당 요청에 대해 처리 중이거나 처리 시작 전임을 의미합니다. 요청이 처리 중 실패할 수도 있기 때문에 요청은 실행될 수도 실행되지 않을수도 있습니다. - **204 No Content**: 성공 상태 응답 코드는 요청이 성공했으나 클라이언트가 현재 페이지에서 벗어나지 않아도 된다는 것을 나타냅니다. - 400 , 401 , 403 , 404 , 406 상태 코드가 각각 무엇을 의미하는지 알아봅시다. - **400 Bad Request**: 클라이언트의 요청이 잘못되었거나, 서버가 이해할 수 없는 형태로 되어 있어 처리할 수 없을 때 반환됩니다. - **401 Unauthorized**: 클라이언트가 요청한 리소스에 접근하기 위해 필요한 인증이 제공되지 않았을 때 반환됩니다. - **403 Forbidden**: 클라이언트가 인증을 받았지만, 해당 리소스에 대한 권한이 없을 때 반환됩니다. - **404 Not Found**: 서버가 요청한 리소스를 찾을 수 없을 때 반환됩니다. - **406 Not Acceptable**: 클라이언트가 요청에서 "Accept" 헤더를 통해 특정 미디어 타입만을 요청했지만, 서버가 그 미디어 타입을 생성할 수 없는 경우에 반환됩니다 - 500 , 502 , 504 상태 코드가 각각 무엇을 의미하는지 알아봅시다. - **500 Internal Server Error**: 요청을 처리하는 과정에서 서버가 예상하지 못한 상황에 놓였음을 나타냅니다. 이 에러 응답은 "서버 에러를 총칭하는"(catch-all) 일반적인 응답입니다. 보통 이는 서버가 응답할 좀 더 좋은 5xx 에러 코드를 못 찾은 것을 의미합니다. 종종 서버 관리자들은 미래에 같은 에러를 발생하는 것을 방지하기 위해 500 상태 코드 같은 에러 응답들에 더 많은 자세한 내용을 남겨 둡니다. - **502 Bad Gateway**: 서버가 게이트웨이나 프록시 서버 역할을 하면서 업스트림 서버로부터 유효하지 않은 응답을 받았다는 것을 의미합니다. - **504 Gateway Timeout**: 서버가 게이트웨이 혹은 프록시의 역할을 하는 동안 시간 안에 업스트림 서버(upstream server)로부터 요청을 마치기 위해 필요한 응답를 받지 못했음을 나타냅니다. ## 모르는 용어 - **프록시 서버** : 프록시 서버는 클라이언트와 인터넷 사이에 위치하는 서버로, 클라이언트의 요청을 대신해서 인터넷에 접속하고 그 결과를 클라이언트에게 전달하는 역할을 합니다. - **게이트웨이** : 게이트웨이는 네트워크가 다른 네트워크와 통신할 수 있도록 하는 장치 또는 소프트웨어를 의미합니다. 이는 다른 프로토콜, 데이터 형식 또는 통신 방식을 사용하는 네트워크 간에 정보를 중계하는 역할을 합니다. 이러한 기능 덕분에 게이트웨이는 네트워크 간의 "번역기" 또는 "중개인" 역할을 수행합니다. 위의 질문들을 올바르게 살펴봤다면, 아래의 내용들이 무엇인지 설명할 수 있습니다. - 가장 기본적인 성공 요청 응답의 status 코드는 무엇일까요? - 200 OK - 인증 또는 권한등의 오류에 대해서 주로 사용되는 status 코드는 무엇일까요? - 401 Unauthorized: 리소스접근에 대한 인증이 없을 때 - 403 Forbidden: 인증은 되었지만 리소스에 대한 권한이 없을 때 - 잘못된 접근, 존재하지 않는 경로에 대한 접근에 주로 사용되는 status 코드는 무엇일까요? - 404 Not Found: 서버가 요청한 리소스를 찾을 수 없을 때 반환됩니다. - 서버측 오류에 대해서 주로 사용되는 status 코드는 무엇일까요? - 500 Internal Server Error: 요청을 처리하는 과정에서 서버가 예상하지 못한 상황에 놓였음을 나타냅니다. 이 에러 응답은 "서버 에러를 총칭하는"(catch-all) 일반적인 응답입니다. - status 를 통해서 얻을수 있는 이점은 무엇일까요? - 클라이언트가 서버로 보낸 요청에 대한 응답이 성공인지 실패인지 또한, 구체적으로 어떤 성공인지 어떤 실패인지를 자세히 알 수 있습니다. # URL / URI `URL 과 URI에 대해서 알아봅시다.` - URI(Uniform Resource Identifier) : 인터넷 상의 리소스를 식별하기 위한 고유한 문자열. - URL(Uniform Resource Locator) : URL은 URI의 특수한 형태로, 인터넷 상의 리소스의 정확한 위치를 나타냅니다.