Pertanyaan Dapatkah saya membebani sumber daya url REST dengan argumen yang berbeda?


Menggunakan url sumber daya yang sama, apakah mungkin untuk memanggil metode yang berbeda di bawah tergantung argumennya?

@POST
@Path("/resource/add")
@Consumes(MediaType.APPLICATION_JSON)
public Response add(Class1 arg1);

@POST
@Path("/resource/add")
@Consumes(MediaType.APPLICATION_JSON)
public Response add(Class2 arg2);

5
2017-08-19 19:40


asal


Jawaban:


Untuk menjawab pertanyaan itu

Tidak, itu tidak mungkin karena penampung tidak memiliki informasi tentang cara mengarahkan permintaan.

Apa yang bisa Anda lakukan

Seperti yang ditunjukkan oleh @Jim Garrison di komentar, Anda dapat mengatasi ini dengan membedakan jalur. Namun, saya menemukan ini agak kontra-intuitif. Sejauh yang saya mengerti, itu bukan sumber yang berbeda sama sekali. Anda hanya ingin menggunakan representasi yang berbeda.

Jika Anda benar-benar ingin memperkenalkan logika semacam itu, mungkin Anda harus memperkenalkan jenis media khusus Anda sendiri untuk format tertentu dan menggunakannya sebagai pengganti generik. application/json

Klien dari API Anda harus sadar akan keputusan desain ini. Jika Anda tidak yakin apakah pengenalan jenis media khusus adalah ide yang bagus, lihat jawaban untuk pertanyaan ini, yang mungkin membuatnya sedikit lebih jelas:

Jika Anda tidak ingin memiliki representasi yang berbeda, maka saya tidak benar-benar memahami maksud memiliki dua kelas tersebut. Mungkin divisi ini tidak boleh mencapai RESTful API Anda dan Anda harus menggunakan representasi ini secara internal. Dalam hal ini, Anda mungkin ingin menerapkan adaptor, dekorator atau mungkin pabrik untuk dapat beralih di antara dua penerapan. Sulit untuk merekomendasikan suatu pola tertentu tanpa mengetahui bagaimana kelas-kelas ini seharusnya digunakan dan apa yang mereka wakili.


4
2017-08-19 19:54



Tidak, itu tidak mungkin. Dari contoh Anda, saya dapat melihat bahwa Anda mencoba menambahkan. Jika itu adalah dua kelas yang berbeda, saya menebak bahwa dua hal yang berbeda.

Untuk misalnya: Kontak, Barang seperti itu.

Umumnya dalam kasus ini kita akan memiliki dua api.

Salah satunya adalah untuk menambahkan Kontak (Kelas1) dan satu lagi untuk menambahkan Item (Kelas2). Sehingga itu akan menjadi pemahaman yang jelas untuk Sisi Klien.


0
2017-08-20 09:43