죄송합니다.이 질문은 어리석은 것처럼 들리지만 Jersey를 사용하여 일부 RESTful 서비스를 개발 한 후 스스로에게 질문했습니다. REST가 SOAP와 같은 프로토콜이 아닌 아키텍처 인 경우 왜 JAX-RS와 같은 사양이 필요한가요?
실제로 “HTTP를 통한 서블릿과 RESTful 서비스의 차이점”과 같은 질문을 검색하고 커뮤니티 답변을 요약하면 다음과 같은 결과를 얻었습니다.
- RESTful 서비스 개발 (저지에서)은 본질적으로 서블릿을 사용하는 아키텍처입니다.
- Jersey와 같은 JAX-RS 호환 도구는 XML / JSON 데이터를 쉽게 마샬링-언 마샬링하여 개발자를 지원합니다.
- REST는 일반 서블릿보다 훨씬 효율적인 방식으로 GET / POST / PUT / DELETE를 사용할 수 있도록 도와줍니다.
이 답변에 따르면 JAXB (자동 직렬화를 처리하기 위해)를 사용하는 서블릿을 작성하고 서블릿 코드에서 GET / POST / PUT / DELETE를 효율적으로 사용하면 Jersey와 같은 도구를 사용하지 않습니다. 따라서 JAX-RS.
나는이 진술을 전달하는 것이 매우 잘못되었다는 것을 알고 있습니다.
PS :이 의심은 실제로 PHP로 RESTful 서비스를 개발해야 할 때 발생했습니다. RESTful PHP 코드 중 일부를 살펴본 후, XML / JSON을 처리하기위한 몇 가지 도우미 메서드가있는 동일한 오래된 PHP 스크립트임을 깨달았습니다.
답변
JAX-RS / Jersey를 사용하는 이유는 무엇입니까?
짧은 답변
RESTful 서비스를 더 쉽게 개발할 수 있기 때문입니다.
긴 답변
JAX-RS는 GlassFish, WebLogic, WebSphere, JBoss 등 모든 Java 애플리케이션 서버에 배포 할 수있는 RESTful 서비스를 쉽게 만들 수있는 표준입니다.
JAX-RS는 Java EE의 일부이며 JAX-RS를 다른 Java EE 기술과 함께 사용하면 RESTful 서비스를 훨씬 쉽게 만들 수 있습니다.
- EJB- 세션 빈은 서비스 구현으로 사용되며 트랜잭션 의미 체계도 처리합니다.
- JAX-RS- 세션 Bean을 RESTful 서비스로 노출하는 데 사용됩니다.
- JPA- 데이터베이스에 POJO를 유지하는 데 사용됩니다. EntityManager가 세션 빈에 주입되는 방법에 유의하십시오.
- JAXB -POJO를 XML로 /에서 변환하는 데 사용됩니다 (GlassFish에서 POJO를 JSON으로 /에서 변환하는데도 사용할 수 있음). 기본적으로 JAX-RS는 JAXB 구현과의 상호 작용을 처리합니다.
샘플 JAX-RS 서비스
package org.example;
import java.util.List;
import javax.ejb.*;
import javax.persistence.*;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
@Stateless
@LocalBean
@Path("/customers")
public class CustomerService {
@PersistenceContext(unitName="CustomerService",
type=PersistenceContextType.TRANSACTION)
EntityManager entityManager;
@POST
@Consumes(MediaType.APPLICATION_XML)
public void create(Customer customer) {
entityManager.persist(customer);
}
@GET
@Produces(MediaType.APPLICATION_XML)
@Path("{id}")
public Customer read(@PathParam("id") long id) {
return entityManager.find(Customer.class, id);
}
@PUT
@Consumes(MediaType.APPLICATION_XML)
public void update(Customer customer) {
entityManager.merge(customer);
}
@DELETE
@Path("{id}")
public void delete(@PathParam("id") long id) {
Customer customer = read(id);
if(null != customer) {
entityManager.remove(customer);
}
}
@GET
@Produces(MediaType.APPLICATION_XML)
@Path("findCustomersByCity/{city}")
public List<Customer> findCustomersByCity(@PathParam("city") String city) {
Query query = entityManager.createNamedQuery("findCustomersByCity");
query.setParameter("city", city);
return query.getResultList();
}
}
자세한 내용은:
답변
REST는 본질적으로 서블릿을 사용하는 아키텍처입니다.
전혀 그렇지 않다. REST는 서블릿을 사용하여 구현할 수 있지만 본질적으로이를 사용하지 않으며 본질적으로 Java와 관련이없는 아키텍처 스타일입니다.
JAX-RS는 RESTful 웹 서비스 용 Java API를 정의하는 JSR 사양입니다.
Jersey는 JAX-RS의 특정 구현입니다.
Jersey를 사용할지 아니면 JAX-RS 사양을 준수할지 여부는 사용자에게 달려 있습니다. 작업이 더 쉬워 진다면 좋습니다! 아무도 당신을 강요하지 않는다면.