restful API에 대해 설명해주세요.
RESTful API는 REST 아키텍처 스타일의 제약 조건을 준수하고 RESTful 웹 서비스와 상호작용할 수 있도록 하는 애플리케이션 프로그래밍 인터페이스(API) 입니다.
REST는 URI가 가리키는 리소스인 자원, HTTP Method인 행위, 리소스의 특정 시점 상태를 반영하고 있는 정보인 표현으로 구성됩니다. 또한, RESTful API는 상태 정보를 유지하지 않고, 클라이언트와 서버 간의 통신에서 필요한 모든 정보를 요청(request)과 응답(response)에 포함시켜 전송하는 stateless한 특징을 가집니다.
HTTP 통신에 대해서 설명해주세요.
먼저 http는 웹 서비스에서 클라이언트와 서버 간에 정보를 요청(request)하고 응답(response)받기 위한 프로토콜을 말합니다.
HTTP 통신은 요청-응답(request-response) 모델로 이루어집니다. 클라이언트는 HTTP 요청 메시지를 서버로 보내고, 서버는 HTTP 응답 메시지를 클라이언트로 보냅니다. HTTP 요청 메시지는 메서드(GET, POST, PUT, DELETE 등), URI(Uniform Resource Identifier), HTTP 버전, 요청 헤더, 요청 본문 등의 정보를 포함합니다. 서버는 이 정보를 바탕으로 요청을 처리하고, HTTP 응답 메시지를 생성하여 클라이언트로 보냅니다. HTTP 응답 메시지는 상태 코드, 응답 헤더, 응답 본문 등의 정보를 포함합니다.
HTTP 메소드 GET과 POST의 차이에 대해서 설명해주세요.
GET은 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 메서드입니다. GET 요청은 길이 제한이 있으며 URL에 노출되기 때문에 중요한 정보를 다루면 안됩니다. 그리고 POST와 달리 캐시가 가능한데, 리소스가 요청할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 리소스의 복사본을 반환하기 때문입니다.
POST는 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용 되는 메서드입니다. POST는 전송할 데이터를 HTTP 메시지 body 부분에 담아서 서버로 보냅니다.
JSONPlaceholder - Free Fake REST API
모든 post들을 조회하기
2번 post 조회하기
소프트웨어 마에스트로 활동을 할 때 해커톤 주제가 “공공데이터 포털에 있는 api를 활용해서 웹서비스 만들기”였습니다.
앞으로 백엔드 개발을 하면서 외부 api에서 데이터를 받아와서 사용할 일이 많을텐데요, api 문서를 이해하는 방법부터 호출하는 방법까지 익혀보면 많은 도움이 될 겁니다!
공공데이터 포털에서 서비스유형은 REST, 확장자는 JSON인 API를 호출하면 된다.
나는 아리랑국제방송에서 방송하는 뉴스스크립트로 기사제목, 기사내용, 기사주소 URL, 썸네일, 방송일자를 제공하는 국제방송교류재단_뉴스기사API
를 호출했다.
Base URL
+ /news
로 GET
요청으로 API를 호출하였다.
나는 쿼리스트링 값을 serviceKey=1
, pageNo=1
, numOfRows=11
로 설정했다.
요청 URL은 다음과 같다.
https://apis.data.go.kr/B551024/openArirangNewsApi/news?serviceKey=1&pageNo=1&numOfRows=11
GET
으로 요청하고 /book?bookId=1
이런식으로 PK 값을 URL에 직접 노출했다. 리다이렉트 할 때 불편하다는 생각이 들었고,, 보안상에도 좋지 않다는 생각이 들었다. bookId
를 서버에 전달하는 방법 중 좋은 방법이 무엇인지 궁금하다.body에 bookId를 실어서 보내는 방법을 생각해냈는데 GET 요청은 URL로만 요청이 가능한 게 아닌가? (헷갈리는 부분이다)
bookId와 같은 id 값은 쿼리 파라미터나 path로 가장 많이 사용되는 값인데요, 2번 book을 조회한다면
[GET] /books/2
[GET] /books/bookId=2 (작성해주신 방법)
이렇게 두 가지 방법으로 많이 쓰입니다.
만약 pk값을 직접 노출하고 싶지 않다면 그 값을 해싱해서 보낼 수 있습니다. 예를 들어 '2'라는 값을 암호화하면 DA4B9237BACCCDF19C0760CAB7AEC4A8359010B0 값이 나올 때, 이 값을 이용해서 아래와 같이 요청을 하는 겁니다.
[GET] /books/DA4B9237BACCCDF19C0760CAB7AEC4A8359010B0
[GET] /books/bookId=DA4B9237BACCCDF19C0760CAB7AEC4A8359010B0
요청자는 암호화해서 bookId를 보내고, 응답자는 받은 암호화된 bookId를 복호화해서 사용합니다.
body는 POST요청을 보낼 때만 사용하는 것이 원칙입니다!
Rest에 대해서 주신 질문은 3회차 수업에서 설명드릴게요~!