[21.10.20] REST API

yed·2021년 10월 20일
0

RESTful / REST API

REST 기반으로 구현한 API(Application Programming Interface)
REST API를 웹서비스로 제공한 외부 연결 URI가 RESTful이다.

REST(REpresentational State Transfer)

모든 데이터는 GET방식만으로 전송할 수 있음. 그러나 직관성이 떨어짐
그래서 HTTP방식을 사용할 때 CRUD(GET/POST/PUT/DELETE)랑 연동시켜 특정 URI(uniform resource indentifier)와 상응하는 데이터를 전송하는 것.

HTTP방식을 명시하지 않아도 URI형태만으로 CRUD의 기능을 알 수 있다.

/replies : POST. 댓글 추가(insert)
/replies/all/{데이터명} : GET. 해당 글번호의 모든 댓글 검색(select)
/replies/{데이터명} : PUT. 해당 댓글번호의 내용 수정(update)
/replies/{데이터명} : DELETE. 해당 댓글번호의 댓글 삭제(delete)

  • @ResponseBody
    url을 반환하는게 아니라 데이터를 문자열로 돌려준다. restful을 사용하지않아도 이걸 사용해서 ajax랑 연결이 가능하긴 함

@RestController

controller클래스에 사용되는 어노테이션. REST방식의 데이터 처리를 하는 controller로 데이터만 받아오고 jsp는 돌려주지않는 클래스로 선언하는 것
모든 메소드가 데이터를 클라이언트에게 서비스하는 메소드가 됨

REST API를 사용하면 웹프론트에선 ajax를 사용해서 호출한다(앱같은경우 모든 케이스가 비동기)

REST API와 Ajax

데이터는 문자열인 json형태으로 전송하는게 용이하며 json의 데이터이름도 VO와 통일하는게 좋다.

데이터를 주고받을 때 전송하는 데이터 형태를 서로에게 인식시키기 위해서 ajax의headers속성을 사용한다

$.ajax({
	type:'post',
	url:'replies',
	headers : {
		'Content-Type':'application/json',
		'X-HTTP-Method-Override':'POST'
	},
	data:JSONObj,
	success:function(result, status){
	console.log(result+" : "+status);
		if(status=='success'){
			alert('댓글 입력 성공');
			getAllReplies();
		}
	}
}); //end ajax()

@RequestBody

클라이언트에서 전송받은 json 데이터를 자바 객체로 변환해주는 annotation. json파싱을 간단하게 해줌

위에서 다룬 @ResponseBody는 자바->클라이언트로 json을 전송하는 방식이고 이건 그 반대 클라이언트->자바

@PostMapping
public ResponseEntity<Integer> createReply(@RequestBody ReplyVO vo){
	LOGGER.info(vo.toString());
	int result=replyService.create(vo);	
	return new ResponseEntity<Integer>(result, HttpStatus.OK);
}

ResponseEntity< T >

  • Rest 방식에서 데이터를 반환할때 쓰이는 객체
  • T : 보내고자하는 데이터 제네릭 타입
  • 데이터와 HttpStatus를 전송한다

열거형 클래스 E(Enumeration)

다양한 정보(상수)들, 특정한 상태들만 모아놓은 클래스.
HttpStatus도 그중 하나로 성공한 상태 OK를 전송하면 http연결이 성공적이라는 뜻


underscore -> camel 표기법

<mybatis-config.xml>

  • name은 mapper.xml에서 사용하기때문에 java VO의 변수명(카멜표기법)과 통일하는게 좋음
<property name="test_reply" value="test_reply"/>
<property name="replyNo" value="reply_no"/>
<property name="replyBno" value="reply_bno"/>
<property name="replyContent" value="reply_content"/>
<property name="replyId" value="reply_id"/>
<property name="replyDate" value="reply_date"/>

그런데 xml은 대소문자구분이 없어서 name의 카멜표기법은 내부적으로 다같은 소문자로 읽힘

  • underscore->camel로 사용하려면 매핑이 필요함
<settings>
	<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

log4j.xml

로그관련 설정을 하는 xml. resources 폴더에 있다.

열었을 때 에러가 생긴다면
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">에서
<!DOCTYPE log4j:configuration>으로 바꿔주자

  • 로그의 레벨 설정 - debug
<logger name="edu.spring.ex03">
	<level value="debug" />
</logger>

info로 기본설정되어있는 레벨을 debug로 바꿔주면 LOGGER.info()실행 시 콘솔창에 디버깅모드로 뜬다
경로와 데이터 이동 방향, 쿼리, 파라미터로 주고받은 데이터까지 다 확인할 수 있다.

DEBUG: edu.spring.ex03.ReplyMapper.select_all_by_reply_bno - ==>  Preparing: select * from test_reply where reply_bno=? order by reply_no 
DEBUG: edu.spring.ex03.ReplyMapper.select_all_by_reply_bno - ==> Parameters: 1(Integer)
DEBUG: edu.spring.ex03.ReplyMapper.select_all_by_reply_bno - <==      Total: 1

프로젝트가 생성되고 현재 있는 서버와 자동으로 연결이 안되어서 자바관련 에러가 생길 수 있음 그럴때 프로젝트 속성에서 서버연결해주기

윈도우에서 대부분 .*의 폴더명은 임시폴더라 지우고 다시 깔아도됨. 라이브러리가 꼬였을 경우 .m2폴더를 지우고 다시 시작해보기

노트북 tomcat 확인할 것 - pom.xml 이름. 프로젝트 속성설정.

profile
6개월 국비과정 기록하기

0개의 댓글