API란 인터페이스만 알아도 해당 기능을 사용할 수 있게 하는 기능이다.
즉 자세한 코드는 모르고 틀만 알아도 작동되게 하는것이다.
자세한건 유튜브에 니꼴라스가 설명한 API개념을 보고 오는걸 추천한다.
REST API란?
말 그래도 REST형식의 API를 말한다.
그게 무슨말이냐? 나도 잘 모른다. 영상도 보고 이것저것 찾아봤는데 생각보다 어려운 개념이다.
설명하시는 분들이 정석적으로 설명해서 더 어려운 부분도 있는 것 같다.
쉽게 말해서
REST라는 형식이 존재한다. REST라는 형식이란 예를들면 영어는 영문법이 존재하고 일본어도 일본어 문법이 존재한다.
REST는 REST라는 문법이라고 생각하면 편할것이다.
API를 그 REST라는 문법에 맞춰서 만든 것이 REST API이다.
REST API가 웹 발전에 많은 공을 세웟지만 생각보다 가르치려고 하지 않는다.
초보 개발자들은 REST API는 그냥 이러이러하다 설명해주고 스킵한 후 WEB API를 설명하는 경우가 많다.
왜 그럴까?? 바로 더럽게 깐깐하기 때문이다.
그 형식을 맞추기가 여간 까다로운것이 아니라 그냥 포기하고 대충 쓰는 경우가 많다.
어느정도냐면
어떤 회사가 이게 REST API다 라고 설명했는데 REST API의 논문을 발표한 개발자가 그건 REST API가 아니다라고 반박했고,
시간이 지나서 마이크로소프트에서 REST API의 예제를 발표했는데 또 개발자가 트위터를 통해 그건 진짜REST API가 아니다 라고 발표했다. 아마 이쯤에서 개발자들이 더러워서 안쓴다? 라는 생각이 작용한 것 같다. 물론 깐깐한 규격덕분에 웹 발전에 공을 세웟지만 너무 깐깐해서 또 문제인 것 같다. 그래서 그냥 WEB API를 쓴다.
WEB API
WEB API는 인터페이스 기능만 알아도 사용가능한 API의 웹버전이다.
HTTP 메소드의 종류는 4가지가 있다.
POST: URI를 요청하면 리소스를 생성한다. 삽입한다고 보면 된다.
GET: 리소스를 조회한다. 셀렉트라고 보면 된다.
PUT: 리소스를 수정한다. 업데이트라고 보면 된다
DELETE: 리소스를 삭제한다.
URI는 정보의 자원을 표현해야 한다.
GET/members :멤버의 모든 정보를 달라
GET/members/1 :1번멤버의 모든 정보를 달라
GET/members/delete/1: 이렇게 쓰면 안됨, get은 get만써야함
DELETE/members/1: 1번 멤버를 삭제한다.
실습코드
package kr.or.connect.webapiexam.api;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import kr.or.connect.jdbcexam.dao.RoleDao;
import kr.or.connect.jdbcexam.dto.Role;
@WebServlet("/roles")
public class RolesServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public RolesServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("application/json");
RoleDao dao = new RoleDao();
List<Role> list = dao.getRoles();
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(list);
PrintWriter out = response.getWriter();
out.println(json);
out.close();
}
}
json으로 출력할것이기 때문에 ContentType은 json으로 한다.
ObjectMapper는 json형식의 파일의 타입을 변환시킬 수 있다.
'IT > 부스트코스' 카테고리의 다른 글
부스트코스 웹 앱 개발-1: 자바스크립트 배열 및 오브젝트 (0) | 2020.04.01 |
---|---|
DAO와 DTO사용 이유/getter setter (1) | 2020.02.29 |
부스트코스 DB연결웹앱 #8 JDBC-2 (0) | 2020.02.03 |
부스트 코스 DB연결 웹앱#8 JDBC-1 (0) | 2020.02.03 |
부스트코스 DB연결 웹앱#7 SQL-2 (0) | 2020.01.31 |