刚从web开发转到APP接口开发,遇到了一个问题:
在服务器向APP返回数据时,是否需要遵循‘只返回需要的字段’的习惯?
例如我们有个产品表,结构如下
|---ID---|--名称--|--链接--|--日利率--|--月利率--|--购买人数--|--成功率--|
在产品列表页面的时候,只需要ID,名称,链接这三个数据,其他字段在此页面不需要,那么服务器返回数据的时候,是否一定不能把其他在本页面不需要的字段暴露给APP?
如果每次都返回所有字段,后端这边会节省时间和代码量。但是如果返回所有,由于一个表60+的字段,对网络请求和相应速度有影响。
补充一下,该数据在多个地方都在用,每个地方所需要的字段都不太一样,如果从复用的角度看,几乎就是需要返回所有字段。。那么是选择返回所有以便于复用还是每个接口单独设计接口返回字段呢?
Kembali mengikut keperluan, gabung dan beristighfar, dan gunakan semula dalam berbilang senario.
Dalam keadaan biasa, semua pulangan dikembalikan menggunakan alias dan medan pangkalan data tidak boleh didedahkan.
Ini menggunakan terlalu banyak trafik dan pengguna akan berasa tidak berpuas hati.
Bukankah pangkalan data mempunyai Paparan Anda menambah Paparan padanya berdasarkan jadual produk dan hanya memaparkan medan yang diperlukan.
Salin dan tampal SQL atau sesuatu, gantikan nama jadual dengan nama View (dan kemudian padamkan medan yang tidak diperlukan dalam pernyataan SQL) dan ia hampir mencukupi.
Ia benar-benar tidak mengambil banyak masa dan kod tidak perlu banyak ditukar. Pandangan jenis ini yang hanya meliputi medan adalah sepantas terbang dan hampir tidak akan menjejaskan prestasi pelayan.
Ia bergantung pada keadaan
Lihat penggunaan semula antara muka ini: Jika antara muka digunakan semula di beberapa tempat, tetapi struktur data tindak balas tidak jauh berbeza, maka kembalikan kesemuanya
Secara teorinya, lebih kecil jumlah data yang dikembalikan, lebih baik
Walaupun saya tidak pernah mendengarnya
遵循
, saya rasa pengembalian semula atas permintaan adalah cara terbaik untuk mengurangkan IO. Bukan sahaja pengalaman pengguna yang baik, tetapi tekanan pelayan juga rendah.Secara peribadi, bahagian belakang tidak seharusnya mengembalikan medan pangkalan data secara langsung. Sebaiknya hanya mendedahkan data yang diperlukan.
Amat malas untuk bahagian belakang untuk memulangkan terus medan pangkalan data Jika ia adalah bahagian belakang web yang digunakan secara dalaman, pangkalan data tidak rumit, dan data yang dikembalikan tidak digunakan oleh berbilang pelanggan bahawa ia adalah mudah dan cepat. Situasi lain tidak boleh digunakan. Contohnya, jika terdapat banyak medan jadual, menanya semua medan akan mengurangkan prestasi API yang dipanggil kepada pengguna akhir mungkin membocorkan beberapa maklumat sensitif jika mereka mengembalikan struktur jadual secara langsung (web, ios, android, pengguna pihak ketiga, dsb.), struktur data yang direka bentuk dengan baik diperlukan.
Malah,
ORM
rangka kerja bahagian belakang secara amnya boleh mengehadkan medan yang dikembalikan, atau anda bolehalias
nama medan hanya menulis beberapa baris kod dalamModel
untuk menyelesaikannya. Jika anda memerlukan kawalan yang lebih baik ke atas medan yang dikembalikan, anda harus menggunakan transformer:php: Fraktal
python: marshmallow
delima: ActiveModel Serializers
Saya fikir ia bergantung kepada sama ada pelanggan perlu menggabungkan permintaan Sebenarnya, apa yang anda bimbangkan hanyalah beberapa bait, dan anda tidak mengembalikan data penstriman seperti gambar dalam pautan tentang isu trafik, yang sering digunakan oleh pelanggan Semuanya berdasarkan mewujudkan pautan dengan pelayan beberapa kali.
Cara terbaik ialah:
1. Nama lajur yang perlu dikembalikan disediakan oleh bahagian hadapan
2 Antara muka sebelah pelayan ditulis sebagai satu universal, dan sql disambungkan mengikut nama lajur yang disediakan oleh hujung hadapan
ps: Walaupun reka bentuk ini menyusahkan pada peringkat awal, ia sangat mudah untuk pengembangan fungsi di peringkat kemudian