magento 2 api tuyến với tham số đầu vào


8

Tôi đang cố gắng tạo tuyến đường api với các tham số đầu vào nhưng tôi không nhận được kết quả như mong đợi.

Đây là webapi.xml của tôi:

<?xml version="1.0"?>
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../app/code/Magento/Webapi/etc/webapi.xsd">
    <route url="/V1/foo" method="POST" secure="true">
        <service class="..\FooInterface"
                 method="getFooById"/>
        <resources>
            <resource ref="anonymous"/>
        </resources>
        <data>
            <parameter name="id" force="true">%id%</parameter>
        </data>
    </route>
</routes>

Đây là giao diện của tôi:

interface FooInterface
{
    /**
     * Test function
     *
     * @api
     * @param string $id
     * @return string
     */
    public function getFooById($id);
}

Và đây là lớp học:

class Foo implements FooInterface
{
    /**
     * {@inheritdoc}
     */
    public function getFooById($id){
        return $id;
    }
}

Tôi đang bỏ qua tệp di.xml với tùy chọn. Bây giờ nếu tôi gọi tuyến đường đó bất cứ điều gì tôi làm tất cả tôi nhận lại được %id%. Ngay cả khi tôi không đặt bất kỳ tham số nào, tôi nhận được thay vì lỗi hoặc điều gì đó.

Tôi làm gì sai ở đây?

Đây là cuộc gọi trong bưu điện: nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Tôi đã thử:

  • gửi yêu cầu nhận
  • gửi yêu cầu nhận với tham số /order?id=foo
  • gửi yêu cầu bài
  • gửi yêu cầu bài với dữ liệu mẫu
  • gửi yêu cầu bài đăng với dữ liệu thô (như trong ảnh chụp màn hình)

Tất cả đều có cùng một kết quả -> %id%

Tôi đang sử dụng btw phiên bản cộng đồng.


Bạn đã tìm thấy bất kỳ giải pháp cho vấn đề của mình? Xin vui lòng cho tôi biết tôi đang đối mặt với vấn đề tương tự nhờ
Purushotam Sharma

Xin lỗi đã rời công ty và không thể truy cập mã nữa. Tôi nghĩ rằng tôi đã làm những gì tôi bắt đầu trong bình luận cuối cùng của tôi trong câu trả lời duy nhất.
Steros

Câu trả lời:


4

Sau khi kiểm tra các mô-đun lõi, thấy rằng parameternút trong webapi.xml chỉ được sử dụng trong Mô-đun khách hàng cho selfloại tài nguyên.

Dưới đây tập tin chịu trách nhiệm chuyển đổi giữ chỗ tham số với giá trị.

/**
 * Replaces a "%customer_id%" value with the real customer id
 */
Magento\Webapi\Controller\Rest\ParamOverriderCustomerId 

Bây giờ có hai cách để truyền tham số trong API.

Giải pháp 1:

webapi.xml như dưới đây:

<?xml version="1.0"?>
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
    <route url="/V1/foo" method="POST" secure="true">
        <service class="..\FooInterface" method="getFooById"/>
        <resources>
            <resource ref="anonymous"/>
        </resources>
    </route>
</routes>

và chỉ định $idđối số trong lớp Giao diện và trong định nghĩa thực hiện. Trong trường hợp này, bạn cần truyền id dưới dạng nội dung.

Giải pháp 2:

webapi.xml như dưới đây:

<?xml version="1.0"?>
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
    <route url="/V1/foo:id" method="POST" secure="true">
        <service class="..\FooInterface" method="getFooById"/>
        <resources>
            <resource ref="anonymous"/>
        </resources>
    </route>
</routes>

và chỉ định $idđối số trong lớp Giao diện và trong định nghĩa thực hiện. Trong trường hợp này, bạn cần chuyển id trong URL làm đối số. Đối với điều này, bạn có thể kiểm tra mô-đun sản phẩm cũng.


Vâng, đó chính xác là những gì tôi muốn, để làm cho nó được yêu cầu!
Steros

Tại sao downvote .. không nhận được. Như bạn đã tuyên bố Inerface với Argument. Đối số là cần thiết rồi. Nếu bạn sẽ không thêm vào webapi.xml. Nó sẽ hoạt động, tôi đã thử nó và nó hoạt động tốt
Pankaj Pareek

Có lẽ nó không rõ ràng? Tôi đặc biệt muốn sử dụng dataphần tử trong webapi.xml. Chỉ cần để nó ra cho đầu ra dự kiến ​​nhưng không giải quyết được vấn đề thực tế.
Steros

Ah bạn đã dẫn tôi đến một cái gì đó: "* Các tham số trong webapi.xml có thể bị ép buộc. Điều này đảm bảo rằng trên các tuyến cụ thể, luôn luôn sử dụng một giá trị cụ thể. * Ví dụ: nếu có" ... / me / .. . "tuyến đường, tuyến đường chỉ nên sử dụng thông tin người dùng cụ thể cho người dùng * hiện đang đăng nhập. Cụ thể hơn, nếu có tuyến đường" / khách hàng / tôi / địa chỉ ", phương thức dịch vụ * được gọi có thể có chữ ký của" getAddresses ( $ customerId) ", nhưng trong webapi.xml, tham số $ customerId * sẽ bị buộc phải là id khách hàng của người dùng được xác thực hiện tại."
Steros

Tìm thấy trong ParamOverriderInterface.php - Hiện tại tôi đang bị bệnh và gặp khó khăn trong việc nắm bắt mọi thứ nhưng nếu tôi hiểu đúng về trạng thái này. Những yếu tố dữ liệu và tham số đó không liên quan nhiều đến tham số yêu cầu. Thay vào đó, họ buộc một giá trị cho một tham số (bất cứ nơi nào đến từ đó).
Steros
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.