Я пытаюсь создать службу RESTful, и я столкнулся с некоторыми проблемами. Я опишу эти проблемы (вопросы) на примере воображаемого сервиса RESTful.Понимание RESTful. URI для сложных действий
Например, мне нужен сервис «Новости» на моем сайте. Новости могут быть разных типов: местные новости и глобальные новости. Новости добавляются администратором. Пользователь может просматривать как локальные, так и глобальные новости (отдельно или все вместе). Новости показываются страницами. Пользователь может просматривать точные новости.
Итак, я построил такую таблицу глагол-существительное для выполнения этой задачи:
GET /news - Get all news
POST /news - Create news
GET /news/{id} - Show the news with id={id}
PUT /news/{id} - Edit the news with id={id}
GET /news/{type}/{page}/{per_page} - Get news page #{page} of type {type}
GET /news/{page} - Get news page #{page} of both types
Итак, есть проблемы:
1) как отличить {страницы} и {ID}? возможно {id} может быть только номером, но {page} - строка, начинающаяся с 'p' (например, 'p1'}?
2) Пользователь может изменить значение «per_page» - сколько новостей отображается на странице. Разве это не слишком сложно - /news/{type}/{page}/{per_page}
? Как это можно упростить?
3) Как должны выглядеть URL-адреса в браузере на этих сервисах? URL-адреса не будут точными, как URI из таблицы выше? Например:
/news - Viewing news (1st page with default 'per_page' and default 'type')
/news/{type} - Viewing news (1st page with default 'per_page' and type={type})
/news/{id} - Viewing exact news with id={id}
/news/{type}/{page}/{per_page} - Viewing exact page of news of exact type.
4) Дополнительные функциональные. Например, поиск фильтра (получение новостей по дате, автору или заголовку). Как реализовать это с помощью REST? Как передать объект фильтра (xml или json)? Как сделать URL страницы с результатами фильтра? /news/{date:12.12.2012,author:'admin'}
или что-то лучше?
Извините за мой грубый английский, если вы видите ошибки грамматики и т. Д., Не стесняйтесь исправить их.
Заранее спасибо.
Я не слишком разбираюсь в REST, но как насчет введения псевдо-типа новостей под названием «все» для отображения всех новостей - поэтому последний URL (/ news/{page}) будет изменен на/news/все/{страница}? Таким образом, у вас нет конфликта с идентификаторами. Что касается {page}/{per_page} - может быть, вместо этого сделать {start} - {end}, поэтому вместо 2/10 (страница 2, 10 на страницу) это будет 10-20 (show news # 10- 20)? Кажется более самоописательным для меня. – Seramme
@Seramme, спасибо. '/ news/all /' действительно помогает в таком случае. '{start} - {end}' звучит хорошо, но это означает, что вычисление страниц теперь является клиентской задачей. –