반응형
1. Web API 디자인 가이드
- URI는 정보의 자원을 표현해야 합니다.
- 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현합니다.
자원에 대한 행위는 HTTP Method로 표현
2. URI는 정보의 자원을 표현해야 한다.
- GET /members
: 위의 표현은 맴버의 모든 정보를 달라는 요청입니다. - GET /members/delete/1
: GET은 정보를 요청할 때 사용합니다. 위와 같이 동사로 삭제를 표현하면 안 됩니다. - DELETE /members/1
: HTTP Method 중의 하나인 DELETE를 이용하여 삭제를 표현해야 합니다.
3. 자원에 대한 행위는 HTTP Method로 표현
- GET /members/1 (o)
- GET /members/get/1 (x)
- GET /members/add (x)
- POST /members (o)
- GET /members/update/1 (x)
- PUT /members/1 (o)
- GET /members/del/1 (x)
- DELETE /members/1 (o)
4. 슬래시 구분자(/)는 계층을 나타낼 때 사용
http://domain/houses/apartments
http://domain/departments/1/employees
- URI 마지막 문자로 슬래시 구분자(/)를 포함하지 않습니다.
- 하이픈(-)은 URI가독성을 높일 때 사용합니다.
- 언더바(_)는 사용하지 않습니다.
- URI경로는 소문자만 사용합니다.
- RFC 3986(URI 문법 형식)은 URI스키마와 호스트를 제외하고는 대소문자를 구별합니다.
- 파일 확장자는 URI에 포함하지 않습니다.
- Accept Header를 사용합니다.
5. 상태 코드
상태 코드 (성공)
상태 코드 (클라이언트로 인한 오류)
상태 코드 (서버로 인한 오류)
6. Web API 실습 코드
<!-- web.xml 파일을 삭제해도 eclipse에서 오류가 발생하지 않는다. -->
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<!-- json 라이브러리 databind jackson-core, jackson-annotaion에 의존성이 있다. -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
pom.xml
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.jdbcRole.dao.RoleDao;
import kr.or.connect.jdbcRole.dto.Role;
@WebServlet("/roles")
public class RoleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public RoleServlet() {
super();
// TODO Auto-generated constructor stub
}
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();
// json 패키지가 제공 : json문자열로 바꾸거나, json문자열을 객체로 바꾸어줌
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(list);
PrintWriter out = response.getWriter();
out.println(json);
out.close();
}
}
RoleServlet.java
7. Web API 실습 코드 2
package kr.or.connect.webapiexam.api;
import java.io.IOException;
import java.io.PrintWriter;
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.jdbcRole.dao.RoleDao;
import kr.or.connect.jdbcRole.dto.Role;
@WebServlet("/roles/*") // 어떤 문자든지 올 수 있다.
public class RoleByIdServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public RoleByIdServlet() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("application/json");
String pathInfo = request.getPathInfo(); // /roles/{roleId}
String[] pathParts = pathInfo.split("/");
String idStr = pathParts[1];
int id = Integer.parseInt(idStr);
RoleDao dao = new RoleDao();
Role role = dao.getRole(id);
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(role);
PrintWriter out = response.getWriter();
out.println(json);
out.close();
}
}
RoleByIdServlet.java
-> url 의 정보를 가져와서 roleId 가 501 번인 정보를 가져와서 json 형식으로 출력한다.
이처럼 JDBC와 서블릿을 이용해서 직접 API 를 만드는 경우는 매우 드물다.
대부분 Spring Framework 에서 API를 작성한다.
반응형
'Programming > JSP & Servlet & Mysql' 카테고리의 다른 글
mysql 1) mac에서 mysql 접속하기 (0) | 2020.12.16 |
---|---|
부스트캠프 6) JSTL (0) | 2020.12.16 |
부스트캠프 5) EL(Expression Language) (0) | 2020.12.15 |
부스트캠프 4) 4가지 Scope (0) | 2020.12.14 |
부스트캠프 3) 서블릿과 JSP 연동 (0) | 2020.12.14 |