[JSCODE] API 개발에 필요한 네트워크 (feat. 공공API 호출하기)

노을·2023년 3월 9일
1

JSCODE

목록 보기
1/7

공부 자료

✅ 네트워크 면접 단골질문!

  1. restful API에 대해 설명해주세요.

    RESTful API는 REST 아키텍처 스타일의 제약 조건을 준수하고 RESTful 웹 서비스와 상호작용할 수 있도록 하는 애플리케이션 프로그래밍 인터페이스(API) 입니다.

    REST는 URI가 가리키는 리소스인 자원, HTTP Method인 행위, 리소스의 특정 시점 상태를 반영하고 있는 정보인 표현으로 구성됩니다. 또한, RESTful API는 상태 정보를 유지하지 않고, 클라이언트와 서버 간의 통신에서 필요한 모든 정보를 요청(request)과 응답(response)에 포함시켜 전송하는 stateless한 특징을 가집니다.

  2. HTTP 통신에 대해서 설명해주세요.

    먼저 http는 웹 서비스에서 클라이언트와 서버 간에 정보를 요청(request)하고 응답(response)받기 위한 프로토콜을 말합니다.

    HTTP 통신은 요청-응답(request-response) 모델로 이루어집니다. 클라이언트는 HTTP 요청 메시지를 서버로 보내고, 서버는 HTTP 응답 메시지를 클라이언트로 보냅니다. HTTP 요청 메시지는 메서드(GET, POST, PUT, DELETE 등), URI(Uniform Resource Identifier), HTTP 버전, 요청 헤더, 요청 본문 등의 정보를 포함합니다. 서버는 이 정보를 바탕으로 요청을 처리하고, HTTP 응답 메시지를 생성하여 클라이언트로 보냅니다. HTTP 응답 메시지는 상태 코드, 응답 헤더, 응답 본문 등의 정보를 포함합니다.

  3. HTTP 메소드 GET과 POST의 차이에 대해서 설명해주세요.

    GET은 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 메서드입니다. GET 요청은 길이 제한이 있으며 URL에 노출되기 때문에 중요한 정보를 다루면 안됩니다. 그리고 POST와 달리 캐시가 가능한데, 리소스가 요청할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 리소스의 복사본을 반환하기 때문입니다.

    POST는 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용 되는 메서드입니다. POST는 전송할 데이터를 HTTP 메시지 body 부분에 담아서 서버로 보냅니다.



✅ postman으로 원하는 정보를 얻을 수 있는 api 호출하기

JSONPlaceholder - Free Fake REST API

JSONPlaceholder - Guide

  • 모든 post들을 조회하기


  • 2번 post 조회하기


  • 3번 post에 대한 comment들 조회하기 (2가지 방법이 있습니다. 2가지 방법 모두 실행해보세요)
    • path 이용해서 조회하기
    • query parameter 이용해서 조회하기

  • post 하나 등록하기
    (테스트용 api이기 때문에 실제로 저장되지는 않습니다. 저장하신걸 다시 조회할 수는 없습니다!)
    • Body를 Json으로 선택하고, 가이드에서 나온 body 부분과 동일한 형식으로 입력
          

✅ (심화) postman으로 공공데이터 api 호출하기

소프트웨어 마에스트로 활동을 할 때 해커톤 주제가 “공공데이터 포털에 있는 api를 활용해서 웹서비스 만들기”였습니다.
앞으로 백엔드 개발을 하면서 외부 api에서 데이터를 받아와서 사용할 일이 많을텐데요, api 문서를 이해하는 방법부터 호출하는 방법까지 익혀보면 많은 도움이 될 겁니다!

공공데이터 포털에서 서비스유형은 REST, 확장자는 JSON인 API를 호출하면 된다.




나는 아리랑국제방송에서 방송하는 뉴스스크립트로 기사제목, 기사내용, 기사주소 URL, 썸네일, 방송일자를 제공하는 국제방송교류재단_뉴스기사API를 호출했다.


Base URL + /newsGET 요청으로 API를 호출하였다.

나는 쿼리스트링 값을 serviceKey=1, pageNo=1, numOfRows=11로 설정했다.
요청 URL은 다음과 같다.

https://apis.data.go.kr/B551024/openArirangNewsApi/news?serviceKey=1&pageNo=1&numOfRows=11



✅ 블로그 글 쓰기

  • 배운 내용, 깨달은 점
    • REST API의 정의를 제대로 알지 못했는데 이번 기회에 찾아보게 되어 좋았다. 아직 완벽히 이해 하지는 못했지만 백엔드 개발자로서의 기본지식(?)을 익히게 되어 좋았다.
    • 공공데이터 api를 처음으로 호출해봤다. 프로젝트를 기획할 때 이런 사이트들을 보고 주제를 정하면 좋을 거 같다. 아직 졸업 프로젝트를 구상하지 못했는데, 공공 API를 호출하는 것도 괜찮을 것 같다는 생각이 들었다!
  • 어려웠던 점, 반성하고 싶은 점 / 개선할 방법
    • 백엔드 공부를 처음 하는 것도 아닌데 REST API 개념을 제대로 알아보지 않은 것을 반성한다. → 블로그에 개념 정리를 잘 하자 (아니면 노션에라도..)
  • 궁금한 점
    • 나의 프로젝트에서 특정 책의 정보를 요청할 때 GET으로 요청하고 /book?bookId=1 이런식으로 PK 값을 URL에 직접 노출했다. 리다이렉트 할 때 불편하다는 생각이 들었고,, 보안상에도 좋지 않다는 생각이 들었다. bookId를 서버에 전달하는 방법 중 좋은 방법이 무엇인지 궁금하다.

      body에 bookId를 실어서 보내는 방법을 생각해냈는데 GET 요청은 URL로만 요청이 가능한 게 아닌가? (헷갈리는 부분이다)

    • rest api랑 reatful api랑 같은 건지 다른 건지 모르겠다 😂
profile
진짜를 알면 곁가지를 몰라도 된다

2개의 댓글

comment-user-thumbnail
2023년 3월 12일

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회차 수업에서 설명드릴게요~!

1개의 답글

관련 채용 정보