본문 바로가기
study

[JSCODE] API 개발에 꼭 필요한 네트워크

by 당코 2023. 3. 9.

API

API는 Application Programming Interface의 약자로 애플리케이션이 다른 프로그램으로부터 지정된 형식으로 요청, 명령을 받을 수 있는 수단이다.

즉, API는 컴퓨터나 소프트웨어를 서로 연결하는 매개체이다.

서버는 API를 통해 자신이 제공하고자 하는 데이터나 기능을 제어할 수 있게 만들고

접근 권한을 가진 프로그램이 API를 통해 서버에서 제공하는 데이터를 요청해서 사용할 수 있다.

 

jsonplaceholder 사이트에서 postman을 통해 api를 직접 호출해 보았다.

https://jsonplaceholder.typicode.com/posts/11에 get으로 조회했을 때의 결과이다.  

id의 값에 따라 응답받는 json값이 달라진다.

 

다음으로 post에 대한 comment를 2가지 방식으로 조회해 보았다.

먼저 path를 이용해 조회해 보았다.

https://jsonplaceholder.typicode.com/posts/3/comments에 get으로 조회했을 때의 결과이다.

[
    {
        "postId": 3,
        "id": 11,
        "name": "fugit labore quia mollitia quas deserunt nostrum sunt",
        "email": "Veronica_Goodwin@timmothy.net",
        "body": "ut dolorum nostrum id quia aut est\nfuga est inventore vel eligendi explicabo quis consectetur\naut occaecati repellat id natus quo est\nut blanditiis quia ut vel ut maiores ea"
    },
    {
        "postId": 3,
        "id": 12,
        "name": "modi ut eos dolores illum nam dolor",
        "email": "Oswald.Vandervort@leanne.org",
        "body": "expedita maiores dignissimos facilis\nipsum est rem est fugit velit sequi\neum odio dolores dolor totam\noccaecati ratione eius rem velit"
    },
    {
        "postId": 3,
        "id": 13,
        "name": "aut inventore non pariatur sit vitae voluptatem sapiente",
        "email": "Kariane@jadyn.tv",
        "body": "fuga eos qui dolor rerum\ninventore corporis exercitationem\ncorporis cupiditate et deserunt recusandae est sed quis culpa\neum maiores corporis et"
    },
    {
        "postId": 3,
        "id": 14,
        "name": "et officiis id praesentium hic aut ipsa dolorem repudiandae",
        "email": "Nathan@solon.io",
        "body": "vel quae voluptas qui exercitationem\nvoluptatibus unde sed\nminima et qui ipsam aspernatur\nexpedita magnam laudantium et et quaerat ut qui dolorum"
    },
    {
        "postId": 3,
        "id": 15,
        "name": "debitis magnam hic odit aut ullam nostrum tenetur",
        "email": "Maynard.Hodkiewicz@roberta.com",
        "body": "nihil ut voluptates blanditiis autem odio dicta rerum\nquisquam saepe et est\nsunt quasi nemo laudantium deserunt\nmolestias tempora quo quia"
    }
]

 

이번엔 쿼리파라미터에 postId의 값을 같이 넘겨보았다.

https://jsonplaceholder.typicode.com/comments?postId=3에 get으로 조회했을 때의 결과이다. 

[
    {
        "postId": 3,
        "id": 11,
        "name": "fugit labore quia mollitia quas deserunt nostrum sunt",
        "email": "Veronica_Goodwin@timmothy.net",
        "body": "ut dolorum nostrum id quia aut est\nfuga est inventore vel eligendi explicabo quis consectetur\naut occaecati repellat id natus quo est\nut blanditiis quia ut vel ut maiores ea"
    },
    {
        "postId": 3,
        "id": 12,
        "name": "modi ut eos dolores illum nam dolor",
        "email": "Oswald.Vandervort@leanne.org",
        "body": "expedita maiores dignissimos facilis\nipsum est rem est fugit velit sequi\neum odio dolores dolor totam\noccaecati ratione eius rem velit"
    },
    {
        "postId": 3,
        "id": 13,
        "name": "aut inventore non pariatur sit vitae voluptatem sapiente",
        "email": "Kariane@jadyn.tv",
        "body": "fuga eos qui dolor rerum\ninventore corporis exercitationem\ncorporis cupiditate et deserunt recusandae est sed quis culpa\neum maiores corporis et"
    },
    {
        "postId": 3,
        "id": 14,
        "name": "et officiis id praesentium hic aut ipsa dolorem repudiandae",
        "email": "Nathan@solon.io",
        "body": "vel quae voluptas qui exercitationem\nvoluptatibus unde sed\nminima et qui ipsam aspernatur\nexpedita magnam laudantium et et quaerat ut qui dolorum"
    },
    {
        "postId": 3,
        "id": 15,
        "name": "debitis magnam hic odit aut ullam nostrum tenetur",
        "email": "Maynard.Hodkiewicz@roberta.com",
        "body": "nihil ut voluptates blanditiis autem odio dicta rerum\nquisquam saepe et est\nsunt quasi nemo laudantium deserunt\nmolestias tempora quo quia"
    }
]

path와 쿼리파라미터를 통해 보내는 것 모두 같은 결과가 나왔다.

 

마지막으로 새로운 post를 하나 등록해 보았다.

등록하는 것이기 때문에 get 대신 post로 요청을 보내고 HTTP 바디에 json 데이터를 추가해 주었다.

테스트용 api이 때문에 실제로 저장되지는 않았지만 생성하고 싶은 리소스를 post로 넘기게 되면 실제로는 새로운 리소스가 생성될 것이다.

 

 

HTTP 통신

HTTP는 인터넷상에서 모든 정보를 주고받을 수 있게 하는 프로토콜이다.

대표적인 4가지 특징이 있다.

  • 클라이언트와 서버 구조로 동작한다.
  • 무상태 프로토콜, 비연결성
  • HTTP 메서드를 통해서 통신을 한다.
  • 단순하고 확장 가능하다.

 

 

HTTP 메서드 GET과 POST

GET

  • 주로 리소스를 조회하는 데 사용된다.
  • 서버에 전달하고 싶은 데이터는 query를 통해서 전달한다.
  • 메시지 바디를 통해 데이터를 전달하는 방식은 권장되지 않는다.

 

POST

  • 새로운 리소스를 생성하거나 요청 데이터를 처리할 때 사용된다.
  • 메시지 바디를 통해 서버로 요청 데이터를 전달한다.
  • 다른 메서드로 처리하기 애매한 경우에도 post를 사용한다.

 

 

배운 내용, 깨달은 점

HTTP에 관한 기본적인 지식들과 API에 관해 공부하였다. 애매하게 이해했던 API에 대해서 더 잘 알게 되었고 추천해 주신 "그런 REST API로 괜찮은가"를 보고 REST에 대한 정의도 깊게 이해할 수 있게 되었습니다. REST의 이론적인 부분과 일반적으로 REST라고 여기는 부분에 대한 차이를 알게 되었습니다. 

 

궁금한 점

기본 도메인으로 깃허브에 접속할 때  로그인 하기 전에는 get으로 요청하고 로그인한 후에는 post로 요청되는 것이 맞나요? 그리고 post로 보낼 때 PRG 패턴이 사용된다고 들었는데 맞는지 궁금하고 맞다면 실무에서 로그인 기능을 구현할 때에는 PRG를 기본으로 가지고 간다고 생각해도 될까요?