Короткий ответ:
Я думаю, вы неправильно понимаете, что такое $resource
, поскольку вы пытаетесь использовать его так же, как использовали бы $http
.
$resource
- это оболочка вокруг $http
, обеспечивающая объектно-ориентированный CRUD-способ взаимодействия с RESTful api. (DOCS хорошо объяснит это и предоставит хорошие примеры)
Судя по вашему URL, я не думаю, что вы на самом деле используете REST api, поэтому, вероятно, было бы лучше использовать службу $http
вместо использования службы $ resource.
Тем не менее, вот рабочая скрипка.
Ресурсы и REST API
Ресурс в контексте angular соответствует ресурсу в контексте REST, поэтому он будет ожидать, что ваш веб-сервис будет вести себя как приложение RESTful. Чтобы объяснить это дальше, давайте возьмем вашего друга в качестве примера ... (я буду переделывать ваши URL-адреса, чтобы они лучше соответствовали REST API)
Определение API
Возьмите следующую схему, совместимую с REST + CRUD (для ресурса Friend)
Resource URI Methods allowed
Friend Collection api/friend GET, POST
Friend api/friend/:id GET, PUT
Основная идея здесь заключается в том, что каждый ресурс однозначно представлен URI (это фактически определение URI: - ›Uniform Resource Identifier), а метод HTTP (Verb) используется для определения действие, которое будет выполнено на указанном Ресурсе.
Конечно, REST - это гораздо больше, и я предлагаю вам прочитать этот ТАК POST или эту забавную статью a> или даже диссертация Роя Филдинга < / a> (парень, который придумал REST), которые объясняют концепцию намного лучше, чем я когда-либо мог надеяться.
Структура URL
Этот вопрос подвержен горячим спорам, и вы можете прочитать некоторые интересные моменты здесь, в этом Сообщение SO и статья Роя Филдинга, частично посвященная этому вопросу. Подводя итог, REST не требует чистых URL-адресов. На самом деле, это не требует НИКАКОЙ семантически логической структуры URL.
API REST должны быть управляемыми гипертекстом, то есть с учетом точки входа (URL) API должен быть самоочевидным, чтобы клиент мог самостоятельно обнаруживать ресурсы и отношения с типом ресурсов, заданным типами мультимедиа. Это означает, что если URL-адрес изменится, API не сломается !!
Итак, с практической точки зрения это могут быть действительные:
Home /
Friend Collection /foo
Friend Resource 1 /bar
Friend Resource 2 /baz
Также может быть действительным:
Home index.php
Friend Collection index.php?q=api/friend
Friend Resource 1 index.php?q=api/friend/1
Friend Resource 2 index.php?q=api/friend/2
Или его двоюродный брат, использующий mod_reqrite для создания чистых URL-адресов, может быть действительным
Home /
Friend Collection /api/friend
Friend Resource 1 /api/friend/1
Friend Resource 2 /api/friend/1
или даже это может быть действительным ...
Home /index.php
Friend Collection /friend.php
Friend Resource 1 /friend_1.php
Friend Resource 2 /friend_2.php
Сервер ни в коем случае не обязан следовать какому-либо шаблону. Однако это не означает, что вы не должны придерживаться структуры, в основном для целей SEO (или для удобства чтения). И в последнем примере может быть сложно разработать разумный веб-сервис, который полагается на отдельные сценарии для каждого отдельного ресурса. (вы можете не нарушать принципы REST, но вы, вероятно, нарушите некоторые базовые правила программирования, такие как DRY ...)
Кроме того, angular-resource (отчасти) самоуверенно относится к структуре URL-адресов. Это не абсолютное требование, но ...
Что касается вашего конкретного вопроса, да, вам понадобится mod_rewrite в соответствии с примером, который я вам дал. Но вам не нужен mod_rewrite для создания API, совместимого с REST.
Использование модуля angular-resource
Теперь, когда наша схема API настроена и следует принципам REST + CRUD, мы можем использовать весь потенциал модуля angular-resource.
Мы можем создать клиентское представление (интерфейс) Друга.
//Custom actions
var actions = {
update: {
method: 'PUT'
}
}
var friendUrl = "/api/friend/:id"; // should be obtained by inspecting the API iteself, usually the parent collection.
var Friend = $resource(friendUrl, {id: '@id'}, actions);
Чтобы найти друга, мы отправляем запрос GET (и указываем его id);
Friend.get({id: 1}).$promise.then(
function (response) {
//console.log(response);
}
);
Запросы DELETE и PUT (которые мы создали и назвали update) в основном одно и то же. $ resource также поддерживает получение коллекций с помощью запроса метода объекта. Вы можете использовать это, чтобы получить коллекцию друзей.
Обратите внимание, что для простоты я использую жестко заданный URL
person
Tivie
schedule
07.11.2014