2010-02-04 5 views
1

그래서 저지에서 속도를 높이고 "모범 사례"에 대해 질문 할 것입니다. 하나의 파일에 리소스를 얼마나 엄격하게 보관해야하는지. 필요한 경우 하나의 리소스 클래스가 다른 클래스를 참조해야합니까?저지 자원 클래스 상호 작용?

예 :

가 나는 사람의 자원과 약속 자원을 가지고있다. (예 :/Person/1 &/appointment/12345). 나는 또한 사람 1에 대한 모든 약속을 나열하는/Person/1/Appointments와 같은 일을 할 수있다.

그래서 내 질문은 Person Resource 클래스의 getPersonAppointments() 메소드를 구현해야한다. Appointments 리소스 클래스에 추가하고 해당 메서드를 호출하여 "약속"을 반환하는 모든 메서드를 유지합니다.

옳고 그른 방법이 있다는 것을 나는 모른다.

답변

1

약속에는 여러 사람이 있고 사람은 여러 약속을 가지고 있기 때문에 상황은 대칭이며 사람과 약속 사이의 장벽을 피어싱해야합니다.

0

REST API는 리소스에 대한 액세스를 단순화해야합니다. REST의 원칙 중 하나는 "응용 프로그램 상태의 엔진으로 사용되는 하이퍼 미디어"개념입니다.이 기술은 클라이언트가 URI로 관련 리소스를 보내도록하여 클라이언트가 특정 리소스에 대한 URI를 구성하는 방법을 알 필요가 없도록합니다. 선험적. 이 여기에

더 많은 정보 : http://en.wikipedia.org/wiki/HATEOAS

요청/사람/1이 약속 된 URI의 모음을 포함하여, 그 사람에 대한 정보를 반환해야합니다. 그런 다음 클라이언트는 이러한 URI 중 하나를 요청하여 각 약속에 대한 정보를 가져올 수 있습니다./person/1/appointments 구현은 중복됩니다.

0

시나리오에서는 한 사람의 약속을로드하여 다른 리소스 (다른 사람이 리소스를 위임 할 때 사용하는 것으로 가정하고 있음)에서 액세스 할 수 있도록 논리를 적용합니다. 실제 논리는 AppointmentService에 저장되므로 getPersonAppointments()와 함께 사용할 수 있습니다. 당신이 그것을 호출 할 수 있습니다

이 방법 :

  • /사람/1/약속
  • /약속을 personId = 1

모두 같은 응답으로 결과?. 이것은 아마도 최선의 방법은 아니지만 로직이 한 곳에서 읽기 쉽고 재사용 할 수있게 해줍니다. 당신의 AppointmentResource에서 물론

@Path("person") 
public class PersonResource {  
    @GET 
    @Path("{personId: [0-9]+}/appointments") 
    public AppointmentsResource loadAppointmentsForPerson(@PathParam("personId") Long personId) { 
     return new AppointmentsResource(personId); 
    } 
} 

@Path("apointments") 
class AppointmentResource { 

    private AppointmentService service;  
    private Long personId; 

    public AppointmentResource() { 
    } 

    public AppointmentResource(Long personId) { 
     this.personId = personId; 
    } 

    @GET 
    public Response loadAppointmentsForPerson(@QueryParam("personId") Long personId) { 

     Long personIdToUse = null; 
     if (this.personId != null) { 
      personIdToUse = this.personId; 
     } else if (personId != null) { 
      personIdToUse = personId; 
     } else { 
      //no input, bad request 
     } 

     List<Appointment> appointments = service.getPersonAppointments(personIdToUse) 
     //create your response from appointments 
    } 
} 

, 당신은 특정 ID로 약속을 로딩과 같은 다른 물건을해야합니다.