REST API

binary·2022년 6월 10일
0
post-thumbnail

💡REST API

Representational State Transfer Application Programming Interface

웹에서 사용되는 데이터나 자원을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식

💡 리차드슨의 REST 성숙도 모델

아래 단계를 모두 충족해야 REST API 라고 부를 수 있으며, 하나라도 충족하지 않으면 HTTP API라고 불러야 한다고 리차드슨은 주장한다.
그런데 보통 2단계까지만 지키고 RESTful API 라고들 한다.

0단계 : HTTP 사용

  • HTTP 프로토콜 사용하기
    • 요청
      • HTTP 프로토콜의 버전
      • Request Message
      • HTTP Method
      • Request Header
    • 응답
      • HTTP 프로토콜의 버전
      • Response Message
      • 요청의 성공 여부, 이유를 나타내는 Status Code
      • Response Header

1단계 : 개별 리소스와의 통신 준수

  • 개별 리소스에 맞는 엔드포인트 (Endpoint) 사용
    • /groups/:group_id
  • 요청 후 받는 자원의 정보를 응답으로 전달해야 함
    • 리소스에 대한 정보
    • 리소스 사용에 대한 성공/실패 여부

2단계 : HTTP 메소드 원칙 준수

  • CRUD에 맞는 적절한 HTTP 메서드 사용
    • 🌟 HTTP 메서드의 규칙
      • GET
        서버의 데이터를 변화시키지 않는 요청에 사용
      • POST
        요청마다 새로운 리소스 생성
      • PUT
        요청마다 같은 리소스 반환
        데이터 교체
      • PATCH
        데이터 수정
  • 요청에 맞는 응답 코드 사용

3단계 : HATEOAS 원칙 준수

  • Hypertext As The Engine Of Application State
  • Hypertext ( 링크 ) 에 자기 자신에 대한 정보가 담겨야 함
    • Hypertext ( 링크 ) 를 통해 앱 상태 전이가 가능해야 함
      • 🌟 예
        아래 게시글을 조회하는 URI가 있다.
        GET https://my-server.com/article
        글을 조회한 사용자가 다음에 할 수 있는 행동은 무엇일까?
      • 다음 게시물 조회
      • 게시물을 내 피드에 저장
      • 댓글 달기
      • 등등..
        위 같은 행동들이 상태 전이가 가능한 것들이다.
        이걸 Hypertext ( 링크 )를 통해 응답에 넣으면 된다.
{
  "data": {
    "id": 1000,
    "name": "게시글 1",
    "content": "예시 JSON",
    "self": "http://localhost:8080/api/article/1000", // 현재 api 주소
    "profile": "http://localhost:8080/docs#query-article", // 해당 api의 문서
    "next": "http://localhost:8080/api/article/1001", // 다음 article을 조회하는 URI
    "comment": "http://localhost:8080/api/article/comment", // article의 댓글 달기
    "save": "http://localhost:8080/api/feed/article/1000", // article을 내 피드로 저장
  },
}

참고 : HATEOAS를 모르면 당신이 알고 있는 REST API는 REST API가 아니라고 장담할게요.

  • 👩‍💻 코드스테이츠 예시
"links" : {
 	"self" : {
 		"href" : "http://localhost:8080/slots/123",
 		"method" : "GET"
 	},
 	"cancle" : {
 		"href" : "http://localhost:8080/slots/123/cancel",
 		"method" : "DELETE"
 	}
 }

응답에 들어가는 링크 요소는 응답을 받은 후 할 수 있는 다양한 액션들을 위해 하이퍼미디어 컨트롤을 포함하고 있다.
이렇게 응답 내에 새로운 링크를 넣어 새로운 기능에 접근할 수 있도록 한다.

💡 REST API 기본 규칙

  1. URI의 리소스 이름을 지을 때 명사, 소문자를 사용하여 짓는다.
  2. URI에 HTTP Method나 행위에 대한 동사표현이 들어가면 안 된다.
    • GET /members/delete/1 -> DELETE /members/1
    • GET /members/insert/2 -> POST /members/2

💡Open API

  • 누구에게나 열려있는 API
  • API마다 정해진 이용수칙이 있고 누구에게나 열려있다고 해서 무제한으로 이용할 수 있다는 의미는 아니다.

💡API Key

  • 특정 사용자만 API를 사용할 수 있게 하는 암호(문자열)
  • API를 호출할 때 header에 들어가 사용된다.

혹시나 잘못된 정보가 있다면 댓글로 알려주세요 ! 저의 성장의 큰 도움이 될 것 같습니다.🌱

0개의 댓글