Я розробляю простий RESTful сервіс для турнірів та розкладів. Коли турнір створюється за допомогою POST-запиту, що містить тіло JSON, турнір вставляється у a BiMap
, оголошений таким чином у реалізації DAO:
private BiMap<String, Tournament> tournaments = Maps.synchronizedBiMap(HashBiMap.create());
Коли створюється турнір, його асоційований рядовий ідентифікатор повертається, щоб користувач міг мати майбутнє посилання на цей турнір. Він / вона може отримати інформацію з нового турніру, виконавши такий запит:
GET http://localhost:8080/eventscheduler/c15268ce-474a-49bd-a623-b0b865386f39
Але що робити, якщо не знайдеться турнір з таким ідентифікатором? Поки що я повертаю відповідь 204. Ну, Джерсі робить це для мене, коли повертається null
з одного зі своїх методів. Це метод, який відповідає маршруту вище:
@Path("/{id}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Tournament getTournament(@PathParam("id") String id) {
Optional<Tournament> optTournament = tournamentDao.getTournament(id);
if (optTournament.isPresent())
return optTournament.get();
return null;
}
Моє запитання: чи нормально повернути 204: No Content
відповідь, чи 404
натомість це відповідь, оскільки ресурс не знайдено?
Якщо я повинен змінити його на 404, очевидне питання: я повинен змінити правильний підпис методу? Оскільки зараз турнір (типу Tournament
) не може бути повернутий, метод повинен виглядати інакше. Чи слід використовувати цей Response
тип як тип повернення?
{content: ''}
), відповідь 204 була б недоречною.