애플리케이션 레이어 프로토콜이다. 인터넷 상에서 모든 정보를 주고받을 수 있게 한다. 웹 상에서 이루어지는 모든 데이터 교환의 기초이고, 서버와 클라이언트가 데이터를 주고 받을 때 사용된다.
초기에는 HTML과 같은 하이퍼미디어 문서를 주로 전송하였지만, 최근에는 Plain text, JSON , XML 등 다양한 형태의 정보도 전송한다.
HTTP/1.1 -> 가장 많이 사용하며, 가장 중요한 버전.
HTTP/2 -> 성능 개선
HTTP/3 -> TCP 대신에 UDP 사용, 성능 개선
Application Programming Interface 의 약자이다.
데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환 가능 하도록 하는 상호 통신 방법을 규정하고 도와주는 매개체이다.
한마디로 HTTP 요청을 주고 받는 하나의 방법이다.
API는 데이터베이스가 아니지만, 액세스 권한이 있는 앱의 권한 규정과 서비스 요청에 따라 데이터나 서비스 기능을 제공하는 메신저 역할을 한다.
우리가 웹사이트에 접속할 때 URL로 들어가면 원하는 사이트의 이미지가 보인다. 그런데 그 형태가 웹사이트가 아닌, JSON 이라는 형태로 응답을 주는 특별한 URL 이라고 생각하자.
Representational State Trnasfe 의 약자로, 데이터의 이름으로 상태를 구분하여 전송하는 방식
이다.
REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장정을 최대한 활용할 수 있는 아키텍처 스타일이다.
REST 기반으로 서비스 API를 구현한 것이다.
REST API 설계시 가장 중요한 항목은 아래 두가지이다.
1. URI는 정보의 자원을 표현해야 한다는 점
2. 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다는 점
RESTful : REST의 규칙을 지켜 제공하는 웹 서비스 방식을 의미한다.
RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다.(REST의 규칙을 지켜 제공하는 웹 서비스 방식) RESTful 의 목적은 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것이다.
먼저 , URI는 로케이터(locator), 이름(name) 또는 둘다 추가로 분류될 수 있다.
URL은 우리가 흔히 아는 웹브라우저에서 사용하는 주소이다.
URL은 이름을 부여하는 것인데, 이름만 가지고는 주소를 찾아갈 수 없기에 실제로 사용하기는 힘들다.
scheme://[userinfo@]host[:port][/port][/path][?query][#fragment]
RESTful 한 URL 설계 방식 참고1
참고2
1. 소문자를 사용한다.
2. 언더바 대신 하이픈을 사용한다.
3. 마지막에 슬래시를 포함하지 않는다.
4. 행위는 포함하지 않는다.
5. 파일 확장자는 URI에 포함시키지 않는다.
6. 가급적 전달하고자하는 자원의 명사를 사용하되, 컨트롤 자원을 의미하는 경우 예외적으로 동사를 허용한다.
7. URI에 작성되는 영어를 복수형으로 작성한다.
주요 메서드
기타 메서드
1-1. API에 대해 설명해보자.
Application Programming Interface 의 약자이다.
데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환 가능 하도록 하는 상호 통신 방법을 규정하고 도와주는 매개체이다.
한마디로 HTTP 요청을 주고 받는 하나의 방법이다.
API는 데이터베이스가 아니지만, 액세스 권한이 있는 앱의 권한 규정과 서비스 요청에 따라 데이터나 서비스 기능을 제공하는 메신저 역할을 한다.
HTTP 통신에 대해서 설명해보자.
HTTP는 어플리케이션 레이어 프로토콜이다. 이를 이용한 통신을 맗한다. 인터넷 상에서 모든 정보를 주고 받을 수 있게 하고, 웹상에서 이루어지는 모든 데이터 교환의 기초이다. 서버와 클라이언트가 데이터를 주고 받을 때 사용된다.
초기에는 HTML과 같은 하이퍼미디어 문서를 주로 전송하였지만, 최근에는 이미지,JSON,XML등 다양한 형태의 정보도 전송한다.
HTTP 메소드 GET과 POST의 차이에 대해서 설명해보자.
GET은 주로 조회에 사용된다. 가져온다는 개념으로, 서버에서 어떤 데이터를 가져와서 보여줄 때 사용된다. 어떤 값이나 내용, 상태 등을 바꾸지 않는 경우에 사용한다.
이에 반해 POST 는 요청 데이터 처리에 사용된다. 수행하다는 개념으로, 서버상의 데이터 값이나 상태를 바꾸기 위해서 사용한다. 예로 들자면, 회원 목록을 보여주는 경우는 GET에 해당하고, 회원의 내용을 저장하고 수정할 때에는 POST를 사용한다.
Postman 을 실행해보았다.
먼저, https://jsonplaceholder.typicode.com/posts URL에서 GET 메소드를 이용하여 모든 post 들을 조회해보았다.
위와 같이 100개의 post가 조회되었다.
그 다음, 2번 post를 조회해보았다. path를 통해 접근하였다.
위와 같이 2번에 해당하는 post가 출력되었다.
그 다음, 3번 post에 대한 comment들을 조회 해보았다.
여기엔 두가지 방법이 있는데, path 이용해서 접근하는 방법과 쿼리 파라미터를 이용하는 방법이 있다.
위와 같이 3번 post 에 대한 comments 들을 조회할 수 있다. 두가지 방법 모두 같은 결과를 출력한다.
그 다음, 새로운 post 를 하나 등록해보았다.
HTTP 메소드를 POST로 바꾸고, Body를 JSON 으로 선택했다. 파라미터 형식과 내용을 직접 작성해주면 된다.
파라미터 형식과 내용을 작성할 때 " " 안에 작성해주어야 한다.
여기의 예시를 보면 알 수 있다. body에 해당하는 부분에서 title, body , userId를 내가 설정해주었다.
위의 예시와 같이 새로운 post가 등록되었다.
먼저 , 공공데이터 포털 에 접속하여 회원가입을 진행하였다.
외부 api 에서 데이터를 받아와서 호출하는 방법을 익혀보겠다.
먼저, 데이터 찾기 - 데이터 목록 메뉴에 들어간다.
그 다음, 조건 검색에서
위와 같이 서비스유형 : REST , 확장자 : JSON 로 조건을 설정하고 검색한다.
오픈 API 에서 '한국토지주택공사_공공임대주택 단지정보 조회 서비스'를 예시로 결정해보았다.
밑으로 내려보면 요청변수와 출력결과, 샘플 코드까지 볼 수 있다.
요청변수는 내가 원하는 데이터를 얻기 위해 검색할 때 조건을 설정하는 변수이다.
출력결과는 내가 조건을 설정해서 검색했을 때 검색결과로 나오는 데이터 결과이다.
샘플코드에는 이 데이터들을 여러 프로그래밍 언어로 호출할 수 있도록 예제 코드가 적혀있다. Java 로 확인해보았다.
오,, 그렇구나 하고 넘어간다.. 이따 인텔리제이에서 실행해보아야 할 코드이다.
그 다음, 참고 문서를 열어 확인해보았다.
밑으로 내리면 요청 / 응답 메시지 예제가 있다.
API를 활용하기 위해서, 오른쪽 상단의 활용 신청을 누르고 신청한다.
자동 승인되어 바로 key를 확인할 수 있었다. 발급 받은 key를 사용하기 까지 시간이 조금 소요된다.
하지만 key를 입력해서 확인해보려고 하니 오류가 나왔다. key 발급까지 시간이 걸려서 그런건가 해서 다음날에도 진행해보았지만 여전히 오류가 뜨고, 인텔리제이에서도 해보았지만 오류가 뜨면서 호출을 할 수 가없어 진행할 수 없었다.
SERVICE KEY IS NOT REGISTERED ERROR 가 떠서, 여러가지 방법을 찾아보았지만 해결할 수 없었다.
배운내용, 깨달은 점
이번에는 HTTP 와 API 와 같은 네트워크에 관련된 개념을 공부해보았다. API가 잘 와닿지 않았는데, 특별한 URL 이라고 설명한 것이 도움이 되었다. Postman을 이용해 API 를 통해 HTTP 메소드를 이용해보기도 하여 사용법을 익히게 되었다. 공공데이터 포털에서 API를 활용해 공부해보고 싶었지만, 아쉽게도 오류가 발생하여 공부하지 못했다.
어려웠던 점, 반성하고 싶은 점 / 개선할 방법
공공데이터 포털에서 API 활용을 위해 Key를 발급 받았지만, SERVICE KEY IS NOT REGISTERED ERROR 와 같은 오류가 나서 진행하지 못했다. 구글링하니 많은 사람들이 겪는 문제였는데, 나는 여러 방법을 시도해보았지만 결국 못했다 ㅠㅠ 다음에 다시 한번 도전해보고자 한다.
궁금한 점
이번에 공부한 내용을 이렇게 한 글에 정리하였는데, 분류하는 게 나을지 고민입니다! API 따로, HTTP 따로 등 글을 분류해서 작성하는게 보기 편할까요?
분류는 민혁님이 보기 편하신대로 해주세요! 한 회차에 대한 내용을 2개 이상의 글로 작성하셨다면 제출하실 때 링크 여러 개 넣어주시면 같이 보겠습니다~ (다음 회차부터는 미션 제출 링크를 여러개로 열어둘게요!)