[Web API] Web API 정리

2019. 3. 9. 21:28JAVA Back-End

Web API (HTTP API)


앞서 REST API의 조건을 충족하지 못하는 데 REST API라 부르면 안된다고 했습니다. 그리고 Web API 혹은 HTTP API라는 걸 사용하겠다고 했습니다.


Web API 디자인 가이드

1. URI는 정보의 Resource를 표현해야합니다.]

2. Resource에 대한 행위는 HTTP 메소드로 표현합니다.


  HTTP 메소드

  역할

 POST

 POST를 통해 해당 URI 요청하면 리소스 생성

 GET

 GET를 통해 리소스를 조회. 조회하고 해당 도큐먼트의 자세한 정보를 가져옵니다 

 PUT

 PUT을 통해 해당 리소스 수정 

 DELETE

 DELETE를 통해 리소스 삭제 

URI는 resource의 정보를 표현합니다

  • GET /menbers  (o

: members의 모든 정보를 달라는 request. 
 명사는 복수로 사용합니다( members 처럼 )

  • GET /members/delete/1  (x) 
: GET은 정보를 요청할 때 사용하는데 위와 같이 삭제를 표현하면 안됩니다.
 URI에 동사를 표현하면 안됩니다 (/delete , /update 이런 식으로 표기하면 X . 반드시 HTTP메서드를 통해서 표현)  

  • DELETE /members/1  (o)

: DELETE 메소드를 사용해 삭제를 표현. (멤버중 1인 것을 삭제해주세요)


슬래시 구분자(/)는 계층을 나타낼 때 사용합니다

http://domain/houses/apartments  ---> 집들중 / 아파트에 대한 request
http://domain/departments/1/employees    --->  해당 도메인의 부서들 중/ 1번 부서의 /사원 에 대한 request
  • URI 마지막은 슬래시 포함하지 X
  • 하이픈(-)은 가독성을 높일 때 사용
  • 언더바(_)는 사용하지 X
  • URI 경로는 소문자만 사용
  • RFC 3986(URI 문법 형식)은 URI 스키마와 호스트를 제외하고 대소문자 구별
  • 파일 확장자는 URI에 포함하지 X
  • Accept Header 사용

HTTP 상태 코드

이전에 redirect를 사용할 때면 상태코드가 301로 응답되는 걸 확인했었습니다.

상태 코드를 좀 살펴보겠습니다.

상태코드 
2XX대  : 성공을 의미

200 : 클라이언트 요청을 정상적으로 잘 수행했어요!
201 : 클라이언트가 어떤 Resource 요청, 해당 Resource가 성공적으로 생성됨 (즉, POST 방식으로 등록을 성공 했을 때)

3XX대 : 클라이언트가 요청한 리소스에 대한 URI가 변경 되었을 때 사용되는 응답코드
(응답 시 Location header에 변경된 URI를 적어 줘야 합니다 - redirect 사용시 )


4XX대  :  클라이언트의 오류

400 : 클라이언트 요청 (request)가 부적절할 경우
401 : 클라이언트가 인정되지 않고 요청됬을 때  
  ex) 로그인 하지 않은 상태로 로그인 해야 사용할 수 있는 자원을 요청할 때 (장바구니 같은?)

403 : 유저 인증상태와 관계 없이 응답하고 싶지 않은 리소스를 클라이언트가 요청 했을 때
  ( 403보다는 400이나 404를 사용할 것을 권고! 403 자체가 리소스가 존재한다는 뜻이므로 )

405 : 클라이언트가 요청한 리소스에서는 사용 불가능한 Method를 이용한 경우의 응답코드
 ex) 서블릿의 doGET만 가지고 있었는데 사용자가 POST로 요청을 하는 경우

5XX대 : 서버가 문제 있을 경우 사용되는 응답코드



[ edwith - 웹프로그래밍 부스트코스 ] 를 개인적으로 공부하고 정리한 공간입니다. 잘못된 부분은 피드백 주시면 감사하겠습니다


'JAVA Back-End' 카테고리의 다른 글

REST API 와 URI 설계  (0) 2023.02.11
상태유지(Cookie & Session)  (0) 2019.06.14
[REST API] REST API인가? Web API인가?  (0) 2019.03.09
[JDBC] MySQL에서 JDBC 사용  (0) 2019.03.09
[JDBC] JDBC (Java Database Connectivity)  (1) 2019.03.06