[21.10.20] REST API
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 이름. 프로젝트 속성설정.
Author And Source
이 문제에 관하여([21.10.20] REST API), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yeddoen/21.10.20-REST-API저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)