2015-05-07 14 views
6

Tôi cần api còn lại để tạo ra khách hàng trong magneto cho rằng tôi đi theo hướng dẫn http://www.authenticdesign.co.uk/extending-magento-rest-api-v2/Tuỳ chỉnh REST API trong Magento

này Tôi đi theo nó từng bước, Nhưng Khi tôi kiểm tra các api về khách hàng còn lại nó cho tôi: {"messages":{"error":[{"code":404,"message":"Request does not match any route."}]}}

Tôi không biết mình đang phạm sai lầm ở đâu. Giúp tôi ở đây vì tôi rất mới với Magento cũng như cho php.

Các bước thực hiện:

1. Gia hạn Enabled tại (app/etc/module/Custom_Restapi.xml)

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

2. config.xml tại (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 tại (app/code/local/Tùy chỉnh/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. Mẫu Lớp Restapi.php tại (app/code/local/tùy chỉnh/Restapi/mẫu/Api2/Restapi.php)

<?php 

class Custom_Restapi_Model_Api2_Restapi extends Mage_Api2_Model_Resource 
{ 

} 

?> 

5. V1.php tại (app/code/local/Custom/Restapi/mẫu/Api2/Restapi/Nghỉ ngơi/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")); 
    } 

} 
?> 

Và url của tôi giống như: baseurl/api/rest/customer

Trả lời

9

Tôi sẽ đưa nhận xét này vì tôi cảm thấy đây không phải là câu trả lời đầy đủ, nhưng tôi chưa được phép. Một vài điều:

  1. Thẻ chung của bạn trong config.xml không bị đóng.

  2. Bạn không thể tạo bản ghi bằng url tham chiếu thực thể, bạn phải sử dụng tuyến thu thập được xác định trong nút route_collection trong api2.xml. Vì vậy, bạn nên gọi/api/rest/customer.

  3. Không cần phải có một "tạo ra" con đường riêng biệt kể từ khi phương pháp được chọn theo phương pháp http (bài/get/xóa/etc) và nội dung cơ . Tôi sẽ đề xuất một tuyến đường "khách hàng /: id" cho phần tử route1entity . Vì vậy, hãy chắc chắn rằng bạn đang gửi một HTTP POST.

Tôi không thể tạo lại lỗi chính xác mà bạn đã đăng, nhưng tôi có thể làm việc này sau khi sửa các mục ở trên.

Ngoài ra, hãy đảm bảo cấp quyền cho tài nguyên này trong khu vực quản trị và xóa bộ nhớ cache cấu hình Dịch vụ web của bạn.

Ngoại lệ cụ thể mà bạn đã liệt kê được ném trong Mage_Api2_Model_Router trong phương thức tuyến đường.

Tôi đã làm lại điều này và tạo một repo trên github với mô-đun đang hoạt động: https://github.com/themizzi/Custom-Magento-Rest-Api2. Mô-đun này sử dụng quyền truy cập của Khách vì tôi không có thời gian để thực hiện toàn bộ thỏa thuận oAuth, nhưng nếu bạn chỉ cập nhật nút khách trong api2.xml thành quản trị viên và cập nhật quyền truy cập của bạn trong khu vực quản trị, nó sẽ hoạt động.

+0

xin lỗi vì thẻ toàn cầu tôi sửa chữa ngày hôm qua bản thân nhưng không được cập nhật ở đây Nhưng tôi không nhận được điểm thứ 2 của bạn hoàn toàn bạn có thể elabrote hơn một chút (có tôi đang sử dụng url như www.myweb.com/api này/phần còn lại/khách hàng trong yêu cầu đăng bài) Cảm ơn – Spartan

+0

để bạn không còn sử dụng url này nữa? Và url của tôi giống như: apiurl/customer/create –

+0

Đối với điểm thứ hai, tôi đề nghị xem xét lớp Mage_Api2_Model_Router để xem nó thực sự chọn phương thức để gọi trong lớp mô hình của riêng bạn như thế nào. Nó dựa trên sự kết hợp của phương thức HTTP và loại dữ liệu nội dung. Đó cũng là nơi ngoại lệ cụ thể của bạn bị ném. –

0
  • Thứ nhất bạn đã làm sai lầm nhỏ trong

    Bước 1. Mở rộng Enabled tại (app/etc/module/Custom_Restapi.xml)

    Bạn mở thẻ như <Custom_Restapi> nhưng đóng dưới dạng <Custom_Restapi_Grops> và bạn cũng đã bỏ lỡ <?xml version="1.0"?> thẻ.

  • Thứ hai Bạn có thể đặt mã của bạn trong _retrieveCollection() như trong api2.xml bạn đã chỉ định 1 đường & rằng để lấy bộ sưu tập.

    Hoặc đặt mã của bạn trong _retrieveCollection() hoặc trong _retrieveCollection() gọi phương thức _create của bạn.

  • Cuối cùng bạn đã xác định firstname, lastname, email & mật khẩu như thuộc tính trong api2.xml Họ không phải là POST Parameters, & tôi hoặc không familier với chức năng của getBodyParams() Phương pháp

    Hoặc bạn phải xác định các tuyến để có được tất cả 4 thông số qua URL trong api2.xml hoặc Bạn có thể thử $ _GET [] bằng cách đính kèm tất cả các tham số của bạn trong Chuỗi truy vấn.

HopeFully nó sẽ giúp bạn.

Cảm ơn