REST ful이란?

1.RESTful API란?

: API 시스템 구현하기 위한 아키텍쳐 중에 널리 사용되는 형식

2. Restful하다

: 리소스(HTTP URI로 정의된)를 어떻게 한다(HTTP Method + Payload)를 구조적으로 깔끔하게 표현 하는 것

3. Restful 장점

self-descriptiveness : Restful API 자체만으로 API 목적(or 의도)이 한눈에 알아볼 수 있다.

4. Restful API 설계규칙

  • URI(http정보를 제외한 부분?) 정보는 명확하게 사용하기

  • resource(target부분)는 명사 사용하기(단, 명사의 단&복수 사용은 적절하게)

    • ex1)GET/user/1 : 유저 한명의 정보를 불러올 경우라면, 단수 사용 OK

    • ex2)GET/users/1 : 여러 유저 리스트 중에 한명을 불러올 경우라면, 복수 사용해도 OK

  • resource에 대한 행위HTTP Method(GET, POST, PUT, DELETE)로 표현하기
    ex1) GET delete/user/1 (X) --> DELETE/users/1 (O)

  • HTTP메소드의 동사를 URI에 포함되게 작성하지 않기
    (why? resource 부분은 명사만 작성해야 하며, 충분히 HTTP 메소드로 사용할 동사를 1개만으로도 표현 가능해야 하며, 가능해야 함)

    • ex2) GET/user/show/1 (X) --> GET/users/1(O) : GET메소드가 show라는 동사의 기능이 표현 가능
    • ex3) POST insert/user/2 (X) --> POST/users/2 (O) : POST메소드가 insert라는 동사의 기능이 표현 가능
  • URI의 '/(슬래시)' 구분자 : 계층관계를 나타냄

  • URI 마지막 문자엔 '/(슬래시)' 사용X
    ex) GET users/portfolios/ (X)

  • '_(언더바)' 사용X, '-(하이픈)' 사용O
    ex1) GET user/1/profile_photo (X)
    ex2) GET user/1/profile-photo (O)

    5. Path parameter / Query parameter

1)Path parameter : '/(슬래시)'로 되어 있는것

  • ex1) GET http:127.0.0.1:8000/users
RESPONSE 200 OK

{
"result" : [
    {
      "name" : "전원우",
      "email" : "[email protected]",
      "age" : 26,
    },
    {
      "name" : "권호시",
      "email" : "[email protected]",
      "age" : 26,
    }
  ]
}

***POST / PATCH / PUT 차이

  • POST : 업데이트, 딜리트도 POST 로 가능함 (POST로 CURD 모두 가능)
  • PATCH : 특정 부분만 업데이트
  • PUT : 전부 업데이트

    그외, 내가 참고 하고 싶은것 (출처 : 얄팍한 코딩사전 - REST API)

    - GET, DElETE : body 없음
    - POST, PUT, PATCH : body 있음

    해당 메소드들은 의도에 맞게 작성해야함
    - POST : 새로운 정보 추가(Create) 할때 사용
    - GET : 데이터 조회(Read) 할때 사용

2)Query parameter : ?가 붙는것 ('/(슬래시)'가 아닌, resource뒤에 '?(물음표)'를 통해 필터할때 주로 사용)

  • ex2) GET /users?age=26
    해석 : users 중에서 age가 26인 정보를 모두 불러오기
RESPONSE 

{
"result" : [
    {
      "id" : 1,
      "name" : "전원우",
      "email" : "[email protected]",
      "age" : 26,
    },
    {
      "id" : 2,
      "name" : "권호시",
      "email" : "[email protected]",
      "age" : 26,
    }
  ]
}
  • ex2) GET /users?age=26&name=전원우
    해석 : users 중에서 age가 26이면서(and), 이름이 전원우 정보를 불러오기
RESPONSE 

{
"result" : [
    {
      "id" : 1,
      "name" : "전원우",
      "email" : "[email protected]",
      "age" : 26,
    },
  ]
}
  • ex3) GET /users?ordering=-id
    해석 : users 중에서 id 순서를 내림차순으로 불러오기(즉, id 1,2,3 순 -> id 3,2,1 순으로)
RESPONSE 

{ "result" : [
   {
      "id" : 2,
      "name" : "권호시",
      "email" : "[email protected]",
      "age" : 26,
    },
   {
      "id" : 1,
      "name" : "전원우",
      "email" : "[email protected]",
      "age" : 26,
    },
  ]
}
  • ex4) GET /users?offset=0&linit=100
    해석 : users 중에서 0번부터 100번까지 불러오기

*** 언제 path parameter 사용하는지, 언제 query parameter 사용하는지?
Query parameter : filtering(필터링 할때 - 색이 노랑색인 경우 등), sorting(정렬 할때 - 최신순, 베스트순, 구매순 등), searching

좋은 웹페이지 즐겨찾기