[rest] JAX-RS / Jersey를 사용하는 이유는 무엇입니까?

죄송합니다.이 질문은 어리석은 것처럼 들리지만 Jersey를 사용하여 일부 RESTful 서비스를 개발 한 후 스스로에게 질문했습니다. REST가 SOAP와 같은 프로토콜이 아닌 아키텍처 인 경우 왜 JAX-RS와 같은 사양이 필요한가요?

실제로 “HTTP를 통한 서블릿과 RESTful 서비스의 차이점”과 같은 질문을 검색하고 커뮤니티 답변을 요약하면 다음과 같은 결과를 얻었습니다.

  1. RESTful 서비스 개발 (저지에서)은 본질적으로 서블릿을 사용하는 아키텍처입니다.
  2. Jersey와 같은 JAX-RS 호환 도구는 XML / JSON 데이터를 쉽게 마샬링-언 마샬링하여 개발자를 지원합니다.
  3. 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 사양을 준수할지 여부는 사용자에게 달려 있습니다. 작업이 더 쉬워 진다면 좋습니다! 아무도 당신을 강요하지 않는다면.


답변