REST API에 대해 알아보자.

 

REST API에 대해 알아보자.

우연치않게 REST API에 대해 알아보게 되었다. 정리 할 겸 포스팅을 해본다. REST API에 대해 알아보기 전 REST란 무엇인가를 살펴보자. REST REST : "Represantational State Transfer"의 약자. 자원을 이름으..

hwanhwan2.tistory.com

이전 글을 참고하여 Springboot를 이용해 간단한 REST API를 만들어보고자한다.

 

사용툴 : Eclipse

 

Eclipse에 Springboot 개발 환경 구축 방법은 생략.

 


프로젝트 생성하기

 

1) New Project -> Spring Starter Project

 

2. Maven으로 제작 할 예정이다. Type = Maven으로 설정.

    이름들은 알아서 설정.

   Gradle은 나중에 한번 제작 해볼 예정.

 

3. dependency를 추가해준다.

Spring Web) Spring MVC를 사용하는 RESTful API 웹 애플리케이션 구축에 사용된다. 기본으로 Tomcat 내장 서버가 포함된다.

Mybatis Framework) Mybatis를 사용하기 때문에 추가.

MariaDB Driver) MariaDB를 사용하기 때문에 추가.

(*Spring Boot DevTools : 설정을 더 쉽게 해주는 거라는데 적용이 안되서 제외)

 

 

Finish를 누르게 되면 프로젝트가 생성된다. 생성하게 되면 dependency들을 다운받고난 후 이런 구조의 프로젝트가 생성된다.

application.properties.xml에 MariaDB와 Mybatis 설정을 해줘야한다.

# MariaDB
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver //사용할 DB 드라이버 설정
spring.datasource.url=jdbc:mariadb://localhost:3306/(DB이름) //DB 주소
spring.datasource.username=(DB아이디) //DB 아이디
spring.datasource.password=(DB비밀번호) //DB 비밀번호


# Mybatis
mybatis.mapper-locations:mapper/DBMapper.xml //Mapper.xml 경로 설정

 

설정해주고 난 후 Springboot가 잘 구동되는지 확인한다.

 

프로젝트 오른쪽 클릭 -> Run As -> Java Application

 

(본인이 설정했던 이름)Application - (이름) 이 들어간 클래스를 선택하고 OK.

구동이 된 모습.

 

이제 Mybatis를 이용하여 DB와 연결한 후 REST 작업을 한다.


REST 작업

 

spring MVC 구조에 맞게 패키지를 생성한다.

 

프로젝트 구조

HTTP Method는 대표적으로 GET,POST,PUT,DELETE가 있는데 4개의 Method를 다 올리긴 양이 많아서 GET 방식만 작성한다.

 

사용할 DB 테이블(language)

DTO

데이터를 담을 객체를 생성해준다. (getter,setter 필수)

package springboot.dto;

import java.util.Date;

public class language {
	private int language_id;
	private String name;
	private Date last_update;
	public int getLanguage_id() {
		return language_id;
	}
	public void setLanguage_id(int language_id) {
		this.language_id = language_id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Date getLast_update() {
		return last_update;
	}
	public void setLast_update(Date last_update) {
		this.last_update = last_update;
	}
	@Override
	public String toString() {
		return "language [language_id=" + language_id + ", name=" + name + ", last_update=" + last_update + "]";
	}
	
	
}

 

Controller

@RestController : Spring MVC @Controller에 @ResponseBody가 추가 된 것이다. 이 어노테이션을 사용하면 모든 객체를 JSON형태로 반환해준다.

 

GET 방식의 /language URI에 요청하면 language타입의 List를 반환해준다. 물론 JSON 형태로.

@RestController
public class lanController {
	@Autowired
    lanService service;
    
    @RequestMapping(value = "/language", method = RequestMethod.GET)
    public List<language> getLan(){
    	return service.getLan();
    }
}

 

Service

비즈니스 로직과 관련되어 있기 때문에 @Service 어노테이션 사용.

param : POST/PUT 등의 Method 실행 시 넘어오는 파라미터를 담을 공간.

package springboot.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import springboot.dto.language;
import springboot.mapper.lanMapper;

@Service
public class lanService {

	@Autowired
	lanMapper mapper;
	Map<String,Object> param = new HashMap<String,Object>();
    
	public List<language> getLan() {
		return mapper.getLan();
	}
}

 

Mapper

생성한 interface를 Mapper로 지정하기 위해 @Mapper 어노테이션 사용.

package springboot.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;

import springboot.dto.language;

@Mapper
public interface lanMapper {
	
	List<language> getLan();
    
}

 

 

DBMapper.xml (src/main/resource/mapper/DBMapper.xml)

namespace : Mapper로 설정해준 경로를 넣어준다. 

id : Mapper에서 설정한 메소드 이름.

result Type = 반환할 객체 타입 설정. 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="springboot.mapper.lanMapper">
	<select id="getLan" resultType="springboot.dto.language">
		SELECT * FROM language
	</select>
</mapper>

 

이 후 Postman 프로그램으로 URL을 입력 후 테스트해본다.

Postman 프로그램으로 테스트

잘불러진다.

'전체 개발.. > RESTful' 카테고리의 다른 글

REST API에 대해 알아보자.  (0) 2022.02.14

우연치않게 REST API에 대해 알아보게 되었다.

정리 할 겸 포스팅을 해본다.

 

REST API에 대해 알아보기 전 REST란 무엇인가를 살펴보자.

 

 

REST

 

REST : "Represantational State Transfer"의 약자.

자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의마한다.

 

즉, *HTTP URI을 통해 자원(Resource)을 명시하고

HTTP Method(GET,POST,PUT,DELETE)를 통해 해당 자원의 CRUD Operation을 적용하는 것을 뜻한다.

(*HTTP : 클라이언트와 서버 간의 통신을 위한 프로토콜. 통신 규약)

 

여기서의 CRUD Operation은 컴퓨터 소프트웨어의 기본적인 데이터 처리 기능을 말한다.

1. CREATE : 데이터 생성(POST)

2. READ : 데이터 조회(GET)

3. UPDATE : 데이터 수정(PUT)

4. DELETE : 데이터 삭제(DELETE)

 

 

 


REST 구성 요소

 

1. 자원(Resource) : URI

  • 모든 자원에는 고유한 ID가 존재하고 이 자원은 Server에 존재한다.
  • 자원을 구별하는 ID는 [ex) '/board/{board.no}'] 와 같은 HTTP URI이다.
  • Client는 URI를 이용하여 자원을 지정하고 해당 자원에 대한 조작은 설정한 URI를 통해 Server에 요청한다

 

2. 행위(Verb) : HTTP Method

  • HTTP 프로토콜의 Method(GET,POST,PUT,DELETE)를 이용한다. 

 

3. 표현(Representation)

  • Client가 자원에 대해 조작 요청을 하면 Server는 이에 적정한 응답을 보낸다.
  • 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 응답으로 나타낼 수 있다. (JSON을 많이 쓴다고 한다.)

REST 특징 

 

1. Server - Client 구조를 가진다.

  • 자원이 있는 쪽을 Server, 자원을 요청하는 쪽을 Client  
    • Server : API를 제공하고 비즈니스 로직 처리 및 저장을 담당한다.
    • Client : 사용자 인증, 세션, 로그인 정보 등을 담당한다.

 

2. 무상태성(Stateless)

  • 작업을 위한 상태정보를 따로 저장하고 관리하지 않기 때문에 들어오는 요청만을 단순히 처리하면 된다.
  • 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해진다.

 

3. 캐시 가능(Cacheable)

  • HTTP라는 기존 웹 표준을 사용하기 때문에 웹에서 사용하는 기존 인프라를 활용할 수 있고 이에 따라 HTTP가 가진 캐싱 기능을 적용할 수 있다.

 

4. 자체 표현 구조(Self-descriptiveness)

  • REST API 메시지만 보고도 이를 쉽게 이해할 수 있는 자체 표현 구조로 되어있다. 

REST API

 

위의 REST의 원리를 기반으로 만들어진 API를 REST API라고 한다.

 

그럼 이 REST API를 설계하는 방법에 대해 알아보자.

 

REST API 설계 규칙

1. URI는 정보의 자원을 표시해야 한다.

  • 동사보다 명사를 , 대문자보단 소문자를 사용해야한다. Ex) /Board -> /board

 

2. URI 마지막 문자에 / 는 사용하지 않는다.

  • Ex) /board/ -> /board

 

3. 자원에 대한 행위는 HTTP Method로 표현한다.

  • Ex) /board/write -> POST /board    
  • Ex) /board/list -> GET /board
  • Ex) /board/info?no=1 -> GET board/1

 

4. 언더바(_)보단 하이픈(-)을 사용한다.

  • Ex) /test_page -> /test-page

 

5. CRUD를 나타대는 동사는 URI에 사용되면 안된다.

  • Ex) /board/delete?no=1 -> DELETE /board/1

 

 

게시판 REST API 설계 예시)

목적 HTTP Method URI
게시물 리스트 조회 GET /board
게시물 상세보기 GET /board/{no}
게시물 작성 POST /board
게시물 수정 PUT /board/{no}
게시물 삭제 DELETE /board/{no}

 

 

+ Recent posts