Пользовательский Api Rest в Magento
мне нужен REST api для создания клиента в магнето, для этого я следовал этому руководству 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. Расширение включено (приложение/и т. д./модуль/Custom_Restapi.в XML)
<config>
<modules>
<Custom_Restapi>
<active>true</active>
<codePool>local</codePool>
</Custom_Restapi_Groups>
</modules>
</config>
2. конфиг.xml at (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 at (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 на (приложения/код/местные/таможня/Restapi/модель/Api2/Restapi.в PHP)
<?php
class Custom_Restapi_Model_Api2_Restapi extends Mage_Api2_Model_Resource
{
}
?>
5. В1.php at (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/rest / customer
2 ответов
Я бы поставил это в комментарии, так как я чувствую, что это не полный ответ, но мне еще не разрешено. Несколько вещей:
ваш глобальный тег в config.xml не закрыт.
вы не можете создавать записи, используя url-адрес, который ссылается на сущности, вы необходимо использовать маршрут коллекции, определенный в route_collection узел в api2.XML. Таким образом, вы должны вызывать /api/rest/customer.
нет необходимости иметь отдельный маршрут" create " начиная с метода выбирается методом http (post/get/delete / etc) и телом содержание. Я бы рекомендовал маршрут "customer/: id" для элемент route_entity. Поэтому также убедитесь,что вы отправляете сообщение HTTP.
Я не смог воспроизвести точную ошибку, которую вы опубликовали, но я смог заставить это работать после исправления вышеуказанных элементов.
кроме того, не забудьте дать разрешение на этот ресурс в области администратора и очистить кэш конфигурации веб-служб.
указанное вами конкретное исключение вызывается в Mage_Api2_Model_Router в методе route.
я переработал это и создал РЕПО на 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, и я либо не знаком с функционированием метод getBodyParams ()
либо вы должны определить маршруты, чтобы получить все 4 параметра через URL в api2.в XML или Вы можете попробовать $_GET [], прикрепив все свои параметры в строке запроса.
надеюсь, это поможет вам.
спасибо