Джерси Ресурс Взаимодействие класса? - PullRequest
1 голос
/ 04 февраля 2010

Итак, я собираюсь ускориться на Джерси и у меня есть вопрос "наилучшей практики".Насколько строгими должны быть ресурсы, содержащиеся в одном файле.Должен ли один класс ресурса ссылаться на другой класс, если это необходимо?

Пример:

У меня есть ресурс Person и ресурс назначения.(т.е.: / Персона / 1 & / Назначение / 12345).Я также могу сделать что-то вроде / Person / 1 / Appointments, чтобы перечислить все встречи для person 1.

Итак, мой вопрос, должен ли я реализовать метод getPersonAppointments () в классе Person Resource, или просто кто-то получитссылка на класс ресурсов Appointment и вызов этого метода, сохраняя все методы, которые возвращают «Appointments» вместе.

Я не знаю, существует ли правильный или неправильный путь.

Ответы [ 3 ]

1 голос
/ 20 января 2011

Поскольку на встрече много людей, а у человека несколько встреч, ситуация симметрична, и вам нужно преодолеть барьер между людьми и встречами.

0 голосов
/ 03 декабря 2012

В вашем сценарии я бы поместил логику для загрузки встреч для человека в один ресурс и сделал его доступным из другого ресурса (иными словами, делегирование ресурса, что, я предполагаю, вы уже делаете). Фактическая логика хранится в 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 у вас будет другой материал, например, загрузка встречи по определенному идентификатору.

0 голосов
/ 17 мая 2011

Ваш REST API должен упростить доступ к ресурсам.Одним из принципов REST является идея «Гипермедиа как движок состояния приложения», которая предпочитает направлять клиентов к связанным ресурсам по их URI, чтобы клиенту не нужно было знать, как создавать URI для определенных ресурсов.priori.

Более подробную информацию можно найти здесь: http://en.wikipedia.org/wiki/HATEOAS

В запросе к / person / 1 должна быть возвращена информация об этом человеке, включая набор URI назначения.Затем клиент может запросить любой из этих URI для получения информации о каждом из этих назначений.Осуществление / человек / 1 / назначения является излишним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...