Я недавно начал проект с использованием Luracast Restler. Это кажется очень простым и эффективным способом настройки REST API. С очень небольшим кодом я смог предоставить услуги CRUD для ресурсов моей категории и продукта.
Мои методы GET выглядят так:
class Categories
{
function get($id=NULL) {
if (isset($id))
{
// return category details for $id.
}
else
{
// return all categories.
}
}
}
class Products
{
function get($id=NULL) {
if (isset($id))
{
// return product details for $id.
}
else
{
// return all products.
}
}
}
Клиенты могут получить подробную информацию о категории «книги», используя:
Http: API / категория / книга
или все категории, использующие:
Http: API / категории
То же самое для продуктов. Один продукт:
HTTP: API / продукты / 123
Все продукты:
Http: API / продукты
Пока все хорошо.
Теперь я хочу перейти к чему-то более сложному. Я хочу предоставить своим клиентам доступ к продуктам в категории.
Я хочу, чтобы мой URI был:
HTTP: апи / категории // продукты
E.g.
http:api/categories/books/products
и оттуда я хочу предложить:
HTTP: апи / категория // Продукция /
E.g.
http:api/categories/books/products/123
Это дает моему клиенту возможность переходить с одного ресурса на другой, используя прогрессивную серию ссылок, которые я рассматриваю как основной принцип REST.
Но я не вижу способа добиться этого с Рестлером. Я видел некоторые упоминания о комментариях JavaDoc, используемых для определения сопоставления URI, поэтому я попробовал это:
class Products
{
/**
* url GET /categories/:catId/products/:prodId
*/
function get($catId=NULL, $prodId=NULL) {
// Get product($prodId) of category($catId)
}
}
Но это не работает. Рестлер, похоже, не берет никакой информации из комментария; он неявно создает маршрут URI на основе имени класса и имени функции.
Может кто-нибудь помочь? Я что-то пропустил? Любой совет будет высоко ценится.