Пользовательский 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/отдых/клиент

Author: Pushpendra, 2015-05-07

2 answers

Я бы поместил это в комментарий, так как я чувствую, что это не совсем полный ответ, но мне пока не разрешено. Несколько вещей:

  1. Ваш глобальный тег в config.xml не закрыт.

  2. Вы не можете создавать записи, используя URL-адрес, который ссылается на сущности, вы должны использовать маршрут сбора, определенный в узле route_collection в api2.xml . Таким образом, вы должны звонить /api/rest/клиенту.

  3. Нет необходимости иметь отдельный маршрут "создать", так как метод выбирается методом http (post/get/delete/etc) и содержимым тела . Я бы рекомендовал маршрут "клиент/:идентификатор" для элемента route_entity. Поэтому также убедитесь, что вы отправляете сообщение HTTP.

Я не смог воспроизвести точную ошибку, которую вы опубликовали, но я смог заставить ее работать после исправления вышеперечисленных пунктов.

Кроме того, не забудьте дать разрешение на этот ресурс в области администрирования и очистить кэш конфигурации веб-служб.

В указанное вами конкретное исключение создается в Mage_Api2_Model_Router в методе маршрута.

Я переработал это и создал репозиторий на github с рабочим модулем: https://github.com/themizzi/Custom-Magento-Rest-Api2 . Модуль использует гостевой доступ, так как у меня не было времени пройти всю сделку OAuth, но если вы просто обновите гостевой узел в api2.xml для администрирования и обновления вашего доступа в административной области это будет работать.

 9
Author: Joe Mizzi, 2015-05-11 17:06:22
  • Во-первых, вы допустили небольшую ошибку в

    Шаг 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[], прикрепив все свои параметры в запросе Строка.

Надеюсь, это поможет Вам.

Спасибо

 0
Author: Shashank, 2016-04-24 13:50:40