В вашем сценарии я бы поместил логику для загрузки встреч для человека в один ресурс и сделал его доступным из другого ресурса (иными словами, делегирование ресурса, что, я предполагаю, вы уже делаете). Фактическая логика хранится в AppointmentService, поэтому вы можете использовать ее с getPersonAppointments ().
Так вы можете назвать это:
- / чел / 1 / назначения
- / назначения? PersonId = 1
Оба приводят к одному и тому же ответу.
Возможно, это не лучшая практика, но логика в одном месте и делает ее более читаемой и многократно используемой.
@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
}
}
Конечно, в вашем AppointmentResource у вас будет другой материал, например, загрузка встречи по определенному идентификатору.