Saya pemula dalam kerangka Django REST dan butuh saran Anda. Saya sedang mengembangkan layanan web. Layanan harus menyediakan antarmuka REST ke layanan lain. Antarmuka REST, yang perlu saya terapkan, tidak bekerja dengan model saya secara langsung (maksud saya operasi get, put, post, delete). Sebagai gantinya, ia menyediakan layanan lain dengan beberapa hasil perhitungan. Berdasarkan permintaan, layanan saya membuat perhitungan dan mengembalikan hasilnya (tidak menyimpan hasilnya dalam database sendiri).
Di bawah ini adalah pemahaman saya tentang bagaimana antarmuka REST dapat diimplementasikan. Koreksi saya, jika saya salah.
- Buat kelas yang membuat perhitungan. Beri nama 'CalcClass'. CalcClass menggunakan model dalam pekerjaannya.
- Params yang diperlukan untuk perhitungan diteruskan ke konstruktor.
- Laksanakan operasi kalk. Ini mengembalikan hasil sebagai 'ResultClass'.
- Buat ResultClass.
- Berasal dari objek.
- Hanya saja memiliki atribut yang berisi hasil kalk.
- Salah satu bagian dari hasil perhitungan direpresentasikan sebagai tupel tupel. Seperti yang saya pahami, akan lebih baik untuk serialisasi lebih lanjut untuk mengimplementasikan kelas yang terpisah untuk hasil tersebut dan menambahkan daftar objek tersebut ke ResultClass.
- Buat Serializer untuk ResultClass.
- Berasal dari serializers. Serializer.
- Hasil kalk hanya baca, jadi gunakan sebagian besar kelas bidang untuk bidang, bukan kelas khusus, seperti IntegerField.
- Saya seharusnya tidak mengimplementasikan metode save () baik pada ResultClass, maupun Serializer, karena saya tidak akan menyimpan hasilnya (saya hanya ingin mengembalikannya berdasarkan permintaan).
- Serializer impl untuk hasil bersarang (ingat tupel tupel yang disebutkan di atas).
- Buat Lihat untuk mengembalikan hasil perhitungan.
- Berasal dari APIView.
- Perlu hanya mendapatkan ().
- Di get () buat CalcClass dengan params yang diambil dari permintaan, panggil kalnya (), dapatkan ResultClass, buat Serializer, dan berikan ResultClass ke sana, kembalikan Respons (serializer.data).
- URL
- Tidak ada akar api dalam kasus saya. Saya seharusnya hanya memiliki URL untuk mendapatkan berbagai hasil kalk (kalk dengan par berbeda).
- Tambahkan memanggil format_suffix_patterns untuk menjelajah api.
Apakah saya melewatkan sesuatu? Apakah pendekatannya benar secara umum?
django
rest
django-rest-framework
Zakhar
sumber
sumber
Jawaban:
Django-rest-framework bekerja dengan baik bahkan tanpa mengikatnya pada model. Pendekatan Anda kedengarannya oke, tapi saya yakin Anda bisa memangkas beberapa langkah agar semuanya berjalan baik.
Misalnya, kerangka istirahat dilengkapi dengan beberapa penyaji bawaan. Di luar kotak, JSON dan XML dapat dikembalikan ke konsumen API. Anda juga dapat mengaktifkan YAML dengan hanya menginstal modul python yang diperlukan. Django-rest-framework akan menampilkan objek dasar seperti dict, list, dan tuple tanpa kerja ekstra dari Anda.
Jadi pada dasarnya Anda hanya perlu membuat fungsi atau kelas yang mengambil argumen, melakukan semua perhitungan yang diperlukan dan mengembalikan hasilnya dalam tuple ke tampilan api REST. Jika JSON dan / atau XML sesuai dengan kebutuhan Anda, django-rest-framework akan menangani serialisasi untuk Anda.
Anda dapat melewati langkah 2 dan 3 dalam hal ini, dan cukup gunakan satu kelas untuk perhitungan dan satu untuk presentasi kepada konsumen API.
Berikut beberapa cuplikan yang dapat membantu Anda:
Harap dicatat bahwa saya belum menguji ini. Itu hanya dimaksudkan sebagai contoh, tetapi harus bekerja :)
CalcClass:
Tampilan REST:
Urls.py Anda:
Kode ini akan menampilkan daftar daftar ketika Anda mengakses http://example.com/api/v1.0/resource/?format=json . Jika menggunakan akhiran, Anda bisa menggantinya
?format=json
dengan.json
. Anda juga dapat menentukan pengodean yang ingin Anda kembali dengan menambahkan"Content-type"
atau"Accept"
ke header.Semoga ini bisa membantu Anda.
sumber
.model
atau.queryset
properti.". Saya telah mencoba contoh yang diberikan. Mungkinkah itu sesuatu dengan versi terbaru django-rest-framework?Di urls.py, fungsi login_required membutuhkan
sumber
add a comment
sesi ini