[IT] REST API

노유성·2023년 7월 20일
0
post-thumbnail

REST API란

REST API는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스이다.

REST는 Representational State Transfer으로, API 작동 방식에 조건을 부과하는 소프트웨어 아키텍쳐이다. REST 기반 아키텍쳐를 사용하면 고성능 통신을 안정적으로 지원할 수 있다. 또 구현과 수정이 쉽다.

API 서버 개발자는 여러 아키텍쳐를 사용해 API를 설계할 수 있는데, REST 아키텍처 스타일을 따른 API를 REST API라고 한다. 그리고 REST 규칙을 모두 따르도록 설계한 API를 두고 RESTful API라고 한다.

요약해서 REST는

  1. HTTP URI를 통해 resource를 명시하고
  2. HTTP Method를 이용해 resource에 CURD를 적용하는 것을 의미한다.

REST 특징

  1. 인터페이스 일관성: HTTP 표준에만 따른다면 안드로이드, IOS, 특정 언어나 기술에 종속되지 않고 모든 플랫폼에서 사용가능해야 한다.
  2. 무상태: 각 요청에서 client의 정보를 서버에 저장하지 않는다. 세션, 쿠키 정보를 별도로 관리하지 않기에 서비스의 자유도가 높고 서버에서 불필요한 정보를 관리하지 않으므로 구현이 단순해진다.
  3. 캐시 처리 기능: REST는 HTTP 기존 웹 표준을 그대로 사용하기에 HTTP가 가진 캐싱 기능을 그대로 활용할 수 있다.
  4. 자체 표현 구조: REST API 메세지만 보고도 이를 쉽게 이해할 수 있는 표현 구조로 되어있다. 즉, 명세서가 존재하여 메세지를 보고 직역이 가능하다.
  5. 클라이언트 - 서버 구조: 각자의 역할이 확실하게 분리되기에 클라이언트와 서버에서 개발해야할 내용이 명확하고 서로 간 의존성이 줄어든다.
  6. 게층형 구조: REST 서버는 다층 계층으로 구성될 수 있으며 보안, 로드 밸런시이, 암호화 게층을 추가해서 구조상의 유연성을 둘 수 있다.

RESTful API의 URI 설계 규칙

  1. 소문자 사용
  2. 하이픈 사용: 공백을 위해 언더바를 사용하지 않는다.
  3. 마지막에 슬래스를 포함하지 않는다.
  4. URI에 행위를 포함하지 않는다. 행위는 Method를 사용해서 전달하고 URI에는 delete, get과 같은 행위 정보를 포함해서는 안 된다.
  5. 파일 확장자를 포함하지 않는다.
  6. 최대한 명사를 사용하고 복수형을 사용한다.

API 서버 예제

들어가며

Spring으로 간단한 로컬 서버를 만들고 python을 이용해 API 서버에 get 요청을 보내 데이터를 받는 예제를 만들어보자.

API 서버

web 라이브러리를 사용한다.

@RestController
@RequestMapping(value = "hello")
public class HelloController {
    @GetMapping()
    public Hello get() {
        return new Hello(0, "Hello Spring boot");
    }
}

(도메인)/hello, URI로 get 요청이 들어오면 Hello 객체를 반환한다. 해당 객체의 필드명과 필드값이 key-value로 json 형태로 클라이언트에게 반환한다.

Hello entitiy

public class Hello {
    private int code;
    private String msg;

    public Hello(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

클라이언트

클라이언트 서버를 구축하지는 않았지만 클라이언트에서는 get요청을 보내고 이를 받을 수 있다.

profile
풀스택개발자가되고싶습니다:)

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

정말 좋은 정보 감사합니다!

답글 달기