2015-03-28 2 views
0

Я создаю REST API с Dropwizard и JDBI, и мне нужно работать с различными представлениями одного и того же ресурса.Ограничить объект ответа Dropwizard на основе разрешений

Пример, в котором мы работаем с events ресурса:

event ресурс обладает свойствами field1, field2, field3 и field4.

  1. При создании нового события путем выполнения POST /events тело запроса должно содержать все свойства.
  2. При получении события GET /event/1 в качестве обычного пользователя тело ответа должно содержать только field1 и field2.
  3. При получении события GET /event/1 в качестве суперпользователя тело ответа должно содержать field1, field2 и field3.

Каков наилучший (простой) способ борьбы с этим (№ 2 и № 3), когда дело доходит до ресурса bean, запроса jdbi и ресурса mapper?

Отдельный bean/mapper/query для каждого представления (не очень DRY, даже с базовым компонентом, который расширен)? Фильтрация объекта ответа после его создания (не очень элегантный и, возможно, хрупкий, легко случайно выставлять слишком много данных)?

ответ

1

Отдельный сопоставитель/запрос для этого случая не требуется. Мы всегда должны использовать DTO (объекты передачи данных) для ответа, когда есть разница между бизнес-моделью и ответом. Допустим, у вас есть бизнес-модель, например,

public class Event { 
    private String field1; 
    private String field2; 
    private String field3; 
    private String field4; 
} 

Используйте эту модель для создания событий. Для получения события должно быть два DTO.

public class NormalUserEventDto implements IEventDto{ 
    private String field1; 
    private String field2; 
} 

public class SuperUserEvent implements IEventDto { 
    private String field1; 
    private String field2; 
    private String field3; 
} 

Query to bean mapper все еще может дать модель события. В зависимости от пользователя вы можете предоставить DTO. Есть несколько библиотек, доступных для преобразования одного компонента в другой компонент. Вы можете использовать это также, или вы также можете написать логику для преобразования.

Смежные вопросы