your programing

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

lovepro 2020. 10. 12. 08:00
반응형

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는 본질적으로 서블릿을 사용하는 아키텍처입니다.

No, it is not. REST is an architecture style which can be implemented using servlets, but does not inherently use them, nor inherently have anything to do with Java.

JAX-RS is a JSR Specification defining a Java API for RESTful Web Services.

Jersey is a specific implementation of JAX-RS.

As to whether to use Jersey or try to be compliant to the JAX-RS specification, that's sort of up to you. If it makes your work easier, great! If not no one's forcing you.

참고URL : https://stackoverflow.com/questions/7052152/why-use-jax-rs-jersey

반응형