Saya mencoba membuat rute api dengan parameter input tapi saya tidak mendapatkan hasil yang diharapkan.
Inilah webapi.xml saya:
<?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>
Di sini antarmuka saya:
interface FooInterface
{
/**
* Test function
*
* @api
* @param string $id
* @return string
*/
public function getFooById($id);
}
Dan di sini kelasnya:
class Foo implements FooInterface
{
/**
* {@inheritdoc}
*/
public function getFooById($id){
return $id;
}
}
Saya menghilangkan di.xml dengan preferensi. Sekarang jika saya memanggil rute itu apa pun yang saya lakukan, saya akan dapatkan kembali %id%
. Bahkan jika saya tidak memasukkan parameter apa pun, saya mendapatkannya alih-alih kesalahan atau sesuatu.
Apa yang saya lakukan salah di sini?
Ini adalah panggilan di tukang pos:
Saya mencoba:
- mengirim permintaan get
- mengirim permintaan get dengan parameter
/order?id=foo
- mengirim permintaan pos
- mengirim permintaan posting dengan formulir-data
- mengirim permintaan pos dengan data mentah (seperti yang terlihat di tangkapan layar)
Semua memiliki hasil yang sama -> %id%
Saya menggunakan edisi komunitas btw.
Jawaban:
Setelah memeriksa modul inti, ditemukan bahwa
parameter
simpul di webapi.xml hanya digunakan dalam Modul Pelanggan untukself
jenis sumber daya.File di bawah ini bertanggung jawab untuk Mengkonversi placeholder parameter dengan nilai.
Sekarang ada dua cara untuk melewatkan parameter di API.
Solusi 1:
webapi.xml
seperti di bawah ini:dan tentukan
$id
argumen di kelas Interface dan dalam definisi implementasi juga. Dalam hal ini, Anda harus memberikan id sebagai konten tubuh.Solusi 2:
webapi.xml
seperti di bawah ini:dan tentukan
$id
argumen di kelas Interface dan dalam definisi implementasi juga. Dalam hal ini, Anda harus memberikan id di URL sebagai argumen. Untuk ini, Anda dapat memeriksa modul produk juga.sumber
data
elemen di webapi.xml. Meninggalkannya memberi output yang diharapkan tetapi tidak memecahkan masalah yang sebenarnya.