REST API가 뭔가요?

황인성·2023년 7월 17일
0

movie

이 게시물은 개발자들이 일반적으로 알고 사용하는 수준의 REST API를 말함

  • 계(系, System) : 물리학에서는 요소들을 체계적으로 통일한 조직을 일컫는 말이지만 이 글에서는 소프트웨어적 시스템 영역을 설명한다.

Interface(인터페이스) : 기기(시스템)인간(시스템)이 만나는 접점에서 소통창구의 역할을 해주는 것.
(ex, 자동차 조작부, 자판기 버튼, 컴퓨터의 입ㆍ출력장치, TV의 스크린 등)

UI : User Interface의 약자이다. 소프트웨어(시스템)인간(시스템)의 소통을 위한 소통창구와 같은 역할.

API : Application Pograming Interface 의 약자이다. 기기(시스템)인간(시스템)사이에 소통창구인 Interface가 필요한 것 처럼 소프트웨어(시스템)소프트웨어(시스템)사이에도 요청, 명령을 받는 수단을 규격화 한 것.(소통을 원활히 하도록 하는 것.)

REST API : REST 라는 형식의 API이다. 프론트엔드 웹에서 서버에 데이터를 요청하거나, 배달 앱에서 서버에 주문을 넣거나 하는 등에 사용되는데,
핵심은! => 각 요청이 어떤 동작이나 정보를 위한 것인지를 그 요청의 모습 자체로 추론이 가능하다는 것. (과거의 SOAP이라는 복잡한 형식을 대체한 것.)

REST API의 URI를 통한 사용예시

https://(도메인)/[요청의 모습]

https://(도메인)/classes
반에 대한 정보가 나올 것이라고 추론 가능

{
  "results" : [
    {"idx": 1, "name": "예비반"},
    {"idx": 2, "name": "초급반"},
    {"idx": 3, "name": "중급반"},
    {"idx": 4, "name": "고급반"}
  ]
}

https://(도메인)/classes/2
2반에 대한 정보가 나올 것이라고 추론 가능

{
  "results" : [
    {"idx": 2, "name": "초급반"},
  ]
}

https://(도메인)/classes/2/students
2반의 학생정보 데이터가 나올 것이라고 추론 가능

{
  "results" : [
    {"idx": 1, "name": "홍길동", "sex": "male"},
    {"idx": 2, "name": "계월향", "sex": "female"},
    {"idx": 3, "name": "전우치", "sex": "male"},
    {"idx": 4, "name": "성춘향", "sex": "female"}
  ]
}

https://(도메인)/classes/2/students/15
2반의 15번 학생정보 데이터가 나올 것이라고 추론 가능

{
  "results" : [
    {"idx": 15, "name": "연흥부", "sex": "male"}
  ]
}

https://(도메인)/classes/2/students?sex=male
2반의 남학생정보 데이터가 나올 것이라고 추론 가능

{
  "results" : [
    {"idx": 1, "name": "홍길동", "sex": "male"},
    {"idx": 3, "name": "전우치", "sex": "male"}
  ]
}

https://(도메인)/classes/2/students?page=2&count=10
2반의 학생정보 데이터가 한 페이지 당 10개 씩 나올 것이라고 추론 가능

{
  "results" : [
    {"idx": 11, "name": "최번개", "sex": "male"},
    {"idx": 12, "name": "송하나", "sex": "female"},
    {"idx": 13, "name": "미라한", "sex": "female"},
    {"idx": 14, "name": "연놀부", "sex": "male"},
    ㆍㆍㆍ
  ]
}

REST API에서의 CRUD

  • 서버에 REST API로 요청을 보낼 때는 HTTP라는 규약에 따라 신호를 전송하는데, 이 HTTP로 요청을 보낼 때도 다양한 메서드가 있다. 그중에서 GET, POST, PUT, DELETE, PATCH를 이용한다.
    POST, PUT, PATCH에는 body라는 주머니가 있어서 정보들을 DELETE와 GET 보다 많이, 비교적 안전하게 감춰서 실어보낼 수 있음.
  • 하지만 누구든 목적에 따라 파악하기 쉽게 RESTful하게 API를 만들기 위해서는 이들의 목적에 따라 구분해서 사용해야 함.

GET : 데이터를 Read, 조회하는데 사용함.

POST : Create, 새로운 정보를 추가하는데 사용함. 새로운 정보가 추가될 땐 index가 추가되면서 생성되기 때문에 post요청에서는 이 ID값(index번호)을 명기할 필요가 없음. (https://(도메인)/classes/2/students)
만약, 이 index를 가진 학생의 정보가 변경되었을 땐, uri에 변경할 학생의 index까지 명기한 다음, PUT 또는 PATCH를 사용해서 변경, UPDATE 될 새 정보들을 BODY에 실어보냄

PUT : 정보를 통째로 갈아끼울 때 사용함.

PATCH : 정보 중 일부를 특정 방식으로 바꿀 때 사용함.

DELETE : 데이터를 삭제할 때 사용함.

(HTTP로 요청을 보낼 때의 메서드들 :
GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH)

이것들로 구분 가능한 요청들을 만들어내려면 URI에 동작까지 표시해야 하기 때문에 URI는 '동사'가 아닌 '명사'로 이루어져야 한다는 규칙이 있다.

결론

REST API는 HTTP요청을 보낼 때, 어떤 URI에 어떤 메서드를 사용할지 개발자들 사이에 널리 지켜지는 약속이다. 이는 형식이니 만큼 기술적인 제약을 받지 않는다.

profile
문제 해결을 위해 끊임없이 파고드는 걸 좋아합니다.

2개의 댓글

comment-user-thumbnail
2023년 7월 17일

항상 좋은 글 감사합니다.

답글 달기
comment-user-thumbnail
2023년 7월 18일

정말 잘 읽었습니다, 고맙습니다!

답글 달기