Пользовательский api Rest в Magento
Мне нужен rest api для создания клиента в magneto, для этого я следовал этому руководству http://www.authenticdesign.co.uk/extending-magento-rest-api-v2/
Я следовал этому шаг за шагом, но когда я тестирую api на клиенте rest, он дает мне: {"messages":{"error":[{"code":404,"message":"Request does not match any route."}]}}
Я понятия не имею, где я совершаю ошибку. Помогите мне здесь, так как я очень новичок в magento, а также в php.
Следующие шаги:
1. Включенное расширение на (app/etc/module/Custom_Restapi.xml)
<config>
<modules>
<Custom_Restapi>
<active>true</active>
<codePool>local</codePool>
</Custom_Restapi_Groups>
</modules>
</config>
2. config.xml в (app/code/local/Custom/Restapi/etc/config.xml)
<?xml version="1.0"?>
<config>
<modules>
<Custom_Restapi>
<version>0.1.0.0</version>
</Custom_Restapi>
</modules>
<global>
<models>
<restapi>
<class>Custom_Restapi_Model</class>
</restapi>
</models>
</global>
</config>
3. api2.xml в (app/code/local/Custom/Restapi/etc/api2.xml)
<?xml version="1.0"?>
<config>
<api2>
<resource_groups>
<restapi translate="title" module="Custom_Restapi">
<title>Custom Rest API</title>
<sort_order>10</sort_order>
</restapi>
</resource_groups>
<resources>
<restapi translate="title" module="Custom_Restapi">
<group>restapi</group>
<model>restapi/api2_restapi</model>
<title>Testing My Rest API</title>
<sort_order>10</sort_order>
<privileges>
<admin>
<create>1</create>
</admin>
</privileges>
<attributes translate="" module="Custom_Restapi">
<firstname>First Name</firstname>
<lastname>Last Name</lastname>
<email>Email</email>
<password>Password</password>
</attributes>
<routes>
<route>
<route>/customer</route>
<action_type>collection</action_type>
</route>
</routes>
<versions>1</versions>
</restapi>
</resources>
</api2>
</config>
4. Класс модели Restapi.php в (app/code/local/Custom/Restapi/Model/Api2/Restapi.php)
<?php
class Custom_Restapi_Model_Api2_Restapi extends Mage_Api2_Model_Resource
{
}
?>
5. V1.php в (app/code/local/Custom/Restapi/Model/Api2/Restapi/Rest/Admin/V1.php)
<?php
class Custom_Restapi_Model_Api2_Restapi_Rest_Admin_V1 extends Custom_Restapi_Model_Api2_Restapi
{
/**
* Create a customer
* @return array
*/
public function _create() {
$requestData = $this->getRequest()->getBodyParams();
$firstName = $requestData['firstname'];
$lastName = $requestData['lastname'];
$email = $requestData['email'];
$password = $requestData['password'];
$customer = Mage::getModel("customer/customer");
$customer->setFirstname($firstName);
$customer->setLastname($lastName);
$customer->setEmail($email);
$customer->setPasswordHash(md5($password));
$customer->save();
return json_encode(array("testing","Success"));
}
}
?>
И мой URL-адрес например: baseurl/api/отдых/клиент
2 answers
Я бы поместил это в комментарий, так как я чувствую, что это не совсем полный ответ, но мне пока не разрешено. Несколько вещей:
Ваш глобальный тег в config.xml не закрыт.
Вы не можете создавать записи, используя URL-адрес, который ссылается на сущности, вы должны использовать маршрут сбора, определенный в узле route_collection в api2.xml . Таким образом, вы должны звонить /api/rest/клиенту.
Нет необходимости иметь отдельный маршрут "создать", так как метод выбирается методом http (post/get/delete/etc) и содержимым тела . Я бы рекомендовал маршрут "клиент/:идентификатор" для элемента route_entity. Поэтому также убедитесь, что вы отправляете сообщение HTTP.
Я не смог воспроизвести точную ошибку, которую вы опубликовали, но я смог заставить ее работать после исправления вышеперечисленных пунктов.
Кроме того, не забудьте дать разрешение на этот ресурс в области администрирования и очистить кэш конфигурации веб-служб.
В указанное вами конкретное исключение создается в Mage_Api2_Model_Router в методе маршрута.
Я переработал это и создал репозиторий на github с рабочим модулем: https://github.com/themizzi/Custom-Magento-Rest-Api2 . Модуль использует гостевой доступ, так как у меня не было времени пройти всю сделку OAuth, но если вы просто обновите гостевой узел в api2.xml для администрирования и обновления вашего доступа в административной области это будет работать.
-
Во-первых, вы допустили небольшую ошибку в
Шаг 1. Включенное расширение на (app/etc/module/Custom_Restapi.xml)
Вы открыли тег как
<Custom_Restapi>
, но закрыли тег как<Custom_Restapi_Grops>
а также вы пропустили тег<?xml version="1.0"?>
. -
Во-вторых, вы можете поместить свой код в
_retrieveCollection()
, как в api2.xml вы определили только 1 маршрут и то, чтобы получить коллекцию.Либо введите свой код в
_retrieveCollection()
, либо в_retrieveCollection()
позвоните своему_create
метод. -
Наконец, вы определили имя, фамилия, написать & паролем в качестве атрибута api2.xml они не параметров Post, и я не familier с работы getBodyParams() метод
Либо вам нужно определить маршруты, чтобы получить все 4 параметра по URL-адресу в api2.xml или Вы можете попробовать $_GET[], прикрепив все свои параметры в запросе Строка.
Надеюсь, это поможет Вам.
Спасибо