Exp/네트워크

[Network] RestApi와 RestfulApi의 차이

kilog 2024. 4. 16. 01:15
728x90

안녕하세요 ki입니다.

오늘의 Exp는 RestApi입니다. 클라우드 솔루션 개발 투입했던 시기에 RestApi를 이용해서 개발했습니다.

SwaggerUi를 이용해서 회사 수석님이 만든 Api를 통해 테스트와 개발도 하기도 했고 Api를 개발해서 Swagger에서 테스트한 경험이 있습니다.

 

기본적으로 RestApi는 Representational State Transfer의 약자로 직역하면 "표현 상태  전이 API"입니다

네트워크 기반의 아키텍처 스타일 중 하나로, 웹을 위한 소프트웨어 아키텍처의 한 형식입니다.

  1. 자원(Resource): 고유한 식별자를 갖고 있습니다.. 예로 어, URL은 자원을 식별하기 위한 주소입니다.
  2. 행위(Verb): HTTP 메소드(GET, POST, PUT, DELETE 등)를 사용하여 자원에 대한 행위를 나타냅니다.
  3. 표현(Representation): 클라이언트와 서버 간의 통신은 자원의 표현에 의해 이루어집니다. 
  4. 상태(Stateless): 서버의 확장성과 성능을 향상하기 위해 독립적인 요청과 이전 요청을 기억하지 않습니다.
  5. 인터페이스(Uniform Interface): 클라이언트와 서버 간의 통신을 단순화하고, 서버의 변화와 클라이언트의 변화를 분리하기 위한 인터페이스를 제공합니다.

Rest Api / 출처 NHN Cloud

위에 특징과 직역을 통해 정리하자면 

Representation자원을 표현하는 방식을 의미

Stateless클라이언트와 서버 간의 통신에서 변화할 수 있는 자원의 상태

Transfer클라이언트가 서버에 요청을 보내면 서버는 해당 요청에 따라 변경되는 상태 전이를 의미합니다.

 

장점으로는

  1. 간결성과 유연성: HTTP 프로토콜을 기반하여 간단하고 직관적인 디자인으로. 유연성이 높고 쉽게 이해하고 사용함
  2. 자원 중심: 일관된 인터페이스를 제공하며, API의 확장성과 유지보수성을 향상함
  3. 상태를 관리 X: 상태를 관리하지 않으므로 서버의 확장성이 높고 서버의 부하를 줄이고, 복잡성을 낮추는 데 도움
  4. 캐싱 지원: 클라이언트는 서버의 응답을 캐싱하여 이후 요청에 재사용하여 성능을 향상, 네트워크 대역폭을 절약한다.
  5. 다양한 형식의 데이터 전송: 다양한 형식의 데이터를 전송, 주로 JSON 또는 XML 형식 등의 데이터를 사용
  6. 플랫폼과 언어의 독립성:  HTTP를 기반으로 이식성이 좋아 다양한 플랫폼과 언어에서 사용가능. 따라서 클라이언트와 서버 간의 상호 운용성이 높아집니다.

 

 

 

제가 경험한 중요 포인트는 HTTP 메서드(GET, POST, PUT, DELETE 등)를 기억하셔야 합니다.

// REST 컨트롤러 클래스
@RestController
public class HelloController {


     // 아이템 조회
    @GetMapping
    public List<Item> getAllItems() {
        // 모든 아이템을 데이터베이스에서 조회하여 반환
        return itemService.getAllItems();
    }
    // 아이템 생성
    @PostMapping
    public String createItem(@RequestBody Item item) {
        // 아이템 생성 로직
        return "Item created: " + item.getName();
    }

    // 아이템 수정
    @PutMapping("/{id}")
    public String updateItem(@PathVariable Long id, @RequestBody Item item) {
        // 아이템 수정 로직
        return "Item updated: " + item.getName();
    }

    // 아이템 삭제
    @DeleteMapping("/{id}")
    public String deleteItem(@PathVariable Long id) {
        // 아이템 삭제 로직
        return "Item deleted with ID: " + id;
    }
    
    //RestApi 설계규칙
    
    //슬래시 구분자(/ )는 계층 관계를 나타내는데 사용
    //URI 마지막 문자로 슬래시(/ )를 포함X
    //하이픈(-)은 URI 가독성을 높이는데 사용
    //밑줄(_)은 URI에 사용X
    //URI 경로에는 소문자가 적합하다. 대문자 사용은 피해야 됨
    //파일확장자는 URI에 포함하지 않는다.
    	// Accept Header 를 사용 (ex : GET: http://restapi.exam.com/orders/2/Accept: image/jpg)
    //리소스 간에 연관 관계가 있는 경우
    	// 리소스명/리소스ID/관계가 있는 다른 리소스 명

    
    
    
    
}

 

위 예시 코드는 스프링부트를 사용한 RestApi입니다.

예시 코드에서 보시는 대로

  • @PostMapping : POST 요청 / 생성 시 이용
  • @GetMapping :GET 요청 / 읽기 및 조회 시 이용
  • @PutMapping : PUT 요청 / 수정 및 update시 이용
  • @DeleteMapping : DELETE 요청 / 삭제 시 이용

4가지로 요약하였고 기본적인 지식으로 알고 계신다면 당황하지 않고 소스를 이해할 수 있습니다.

 

잡코리아 우대사항중 일부 발췌

 

글을 마치기 전  저는 위에 사진처럼 채용공고에 우대사항에서 RESTfulApi를 찾아볼 수 있었습니다.

저는 차이를 알고 싶었고  RestfulApi는 Restful API는 REST API를 따르는 웹 서비스를 의미하는 걸 알게 됐습니다.

또한 RestApi의 원리를 지키는 시스템을 Restful이라고 지칭합니다.

 

 

 

 

참고

'Exp > 네트워크' 카테고리의 다른 글

[Network] HTTP Status Code (HTTP 상태 코드)  (0) 2024.04.16