android - APP接口开发的字段暴露问题
巴扎黑
巴扎黑 2017-04-18 09:49:53
0
7
548

刚从web开发转到APP接口开发,遇到了一个问题:
在服务器向APP返回数据时,是否需要遵循‘只返回需要的字段’的习惯?
例如我们有个产品表,结构如下
|---ID---|--名称--|--链接--|--日利率--|--月利率--|--购买人数--|--成功率--|

在产品列表页面的时候,只需要ID,名称,链接这三个数据,其他字段在此页面不需要,那么服务器返回数据的时候,是否一定不能把其他在本页面不需要的字段暴露给APP?

如果每次都返回所有字段,后端这边会节省时间和代码量。但是如果返回所有,由于一个表60+的字段,对网络请求和相应速度有影响。


补充一下,该数据在多个地方都在用,每个地方所需要的字段都不太一样,如果从复用的角度看,几乎就是需要返回所有字段。。那么是选择返回所有以便于复用还是每个接口单独设计接口返回字段呢?

巴扎黑
巴扎黑

membalas semua(7)
大家讲道理

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 boleh aliasnama medan hanya menulis beberapa baris kod dalam Model 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

Peter_Zhu

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan