douhuo0884
2015-05-07 13:16
浏览 73
已采纳

在Magento定制休息Api

I need rest api to create customer in magneto for that I followed this tutorial http://www.authenticdesign.co.uk/extending-magento-rest-api-v2/

I followed it step by step, But When I test the api on rest client it give me: {"messages":{"error":[{"code":404,"message":"Request does not match any route."}]}}

I do not have any idea where I am making mistake. Help me out here as I am very new to magento as well as for php.

The steps are:

1. Enabled Extension at (app/etc/module/Custom_Restapi.xml)

<config>
    <modules>
        <Custom_Restapi>
            <active>true</active>
            <codePool>local</codePool>
        </Custom_Restapi_Groups>
    </modules>
</config>

2. config.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. Model Class Restapi.php at (app/code/local/Custom/Restapi/Model/Api2/Restapi.php)

<?php

class Custom_Restapi_Model_Api2_Restapi extends Mage_Api2_Model_Resource
{

}

?>

5. V1.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"));
   }

}
?>

And my url is like : baseurl/api/rest/customer

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • doumiang0597 2015-05-07 17:06
    已采纳

    I would put this in a comment since I feel this is not a fully complete answer, but I am not yet allowed to. A few things:

    1. Your global tag in config.xml is not closed.

    2. You cannot create records using a url that references entities, you have to use the collection route defined in the route_collection node in api2.xml. So you should be calling /api/rest/customer.

    3. There is no need to have a separate "create" route since the method is chosen by the http method (post/get/delete/etc) and the body content. I would recommend a route of "customer/:id" for the route_entity element. So also be sure that you are submitting an HTTP POST.

    I was not able to reproduce the exact error you posted, but I was able to get this working after correcting the above items.

    Also, be sure to give permission on this resource in the admin area and to clear your Web Services config caches.

    The specific exception you listed is thrown in Mage_Api2_Model_Router in the route method.

    I reworked this and created a repo on github with the working module: https://github.com/themizzi/Custom-Magento-Rest-Api2. The module uses Guest access since I didn't have time to go through the whole oAuth deal, but if you simply update the guest node in api2.xml to admin and update your access in the admin area, it will work.

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • dqqfuth6736 2016-04-24 13:50
    • Firstly you have done small mistake in

      Step 1. Enabled Extension at (app/etc/module/Custom_Restapi.xml)

      You opened the tag as <Custom_Restapi> but closed the tag as <Custom_Restapi_Grops> and also you missed <?xml version="1.0"?> tag.

    • Secondly You can put your code in _retrieveCollection() as in api2.xml you have only defined 1 route & that to retrieve collection.

      Either put your code in _retrieveCollection() or in _retrieveCollection() call your _create method.

    • Lastly you have defined firstname, lastname, email & password as attribute in api2.xml They are not POST Parameters, & I am either not familier with functioning of getBodyParams() Method

      Either You have to define routes to get all 4 parameters via URL in api2.xml or You can try $_GET[] by attaching all your parameters in Query String.

    HopeFully it will Help You.

    Thanks

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题