Katakanlah saya memiliki perusahaan yang memberi peringkat kucing paling lucu di internet.
Saya menawarkan sumber daya di/cats/
mana memberikan kepada pengguna kucing terbaru yang lucu dan menggemaskan.
Pengguna bisa mendapatkan hanya 3 kucing teratas jika mereka belum membayar sama sekali atau terdaftar. 10 kucing teratas jika mereka membayar 337 dolar dan login, dan 100 kucing teratas jika mereka membayar 1337 dolar dan masuk. Saya memiliki 'pengidentifikasi pengguna' saat mengajukan permintaan.
Singkatnya, konsumen /cats/
mendapatkan jumlah kucing yang berbeda berdasarkan 'peringkat pengguna' mereka . Saya memang memiliki pengidentifikasi pengguna di sisi pengguna, tetapi saya tidak memiliki representasi tingkat pengguna di sisi pengguna. Saya ingin memberi tahu pengguna bahwa mereka dapat meningkatkan langganan saat mengajukan permintaan. Artinya, saya harus membedakan antara 3 kucing karena saya hanya menawarkan 3 kucing dan 3 kucing karena itulah yang diizinkan tingkat pengguna .
Apa praktik terbaik untuk membedakan pembatasan sumber daya karena konsumen tidak memiliki hak istimewa yang memadai dan membatasi karena itulah yang dimiliki konsumen?
Bagaimana klien tahu jika mereka dapat meningkatkan peringkat mereka? Artinya, mereka hanya mendapat sumber daya terbatas karena mereka tidak memiliki izin. Apa praktik terbaik di sini?
Catatan, ini adalah penyederhanaan nyata dari kasus aktual. Juga, hanya untuk memperjelas - membaca dihargai.
Memperbarui:
Berikut ini beberapa opsi yang telah kami pertimbangkan:
- Menyimpan objek izin pengguna sekali pada klien, meminta hanya ketika login atau upgrade akun dilakukan.
- Melewati
null
nilai dalam JSON yang menunjukkan ada, tetapi tidak ada yang sebenarnya ditransfer. Jadi 10 kucing untuk pengguna dengan 3 kucing bisa jadi["Garfield","Sylvester","Puss in Boots",null*7]
- Melewati pasangan izin sumber daya
{cats:["Whiskers","Fluffy","Socks"],authCount:3}
Saya ingin melakukan ini dengan benar pertama kali untuk memberikan kucing lucu dengan cara terbaik dan kami dan kami ingin
sumber
Jawaban:
Saya akan mengatakan itu tergantung pada audiens Anda.
No-dev
Jika audiens Anda bukan salah satu pengembang, aku akan pergi dengan cara sebagai berikut:
Katakanlah Anda kembali JSON demi contoh.
Atau yang serupa.
Sangat informatif bagi pengguna untuk mengetahui status akunnya, dan memungkinkan Anda untuk memasukkan informasi apa pun yang Anda inginkan, seperti pesan pemasaran. Hal yang paling penting dari cara ini adalah untuk memberikan beberapa visibilitas mudah untuk pengguna Anda dari akun mereka saat ini.
Dev
Namun, jika audiens Anda adalah murni pengembang, maka saya akan mengatakan: lanjutkan dengan cara HTTP compliant penuh. Untuk menyimpan metadata, Anda menggunakan HTTP header.
Berikut ini sebuah contoh:
Lalu, berikan dokumentasi yang jelas tentang arti header ini. Kebanyakan pengembang akan langsung ke dokumentasi ketika mereka akan melihat header kustom ini, terutama jika mereka melihat batas. Anda dapat melangkah lebih jauh dan menunjukkan tautan di header. Atau Anda dapat menunjukkan tautan ke halaman penetapan harga.
Tetapi sekali lagi, banyak pengembang tidak tahu cara kerja HTTP.
Jadi itu panggilanmu
Satu lebih benar, yang lain lebih mudah diakses.
Lain-lain
Beberapa hal lain yang terkait dengan pertanyaan Anda:
sumber
UserRole = level1
atau apa pun yang Anda ingin panggil hanya untuk memastikan konsumen selalu sadar bagaimana cara menyajikan data apa pun yang mereka terima, dan konsisten di semua respons di mana model data yang kembali akan berbeda dari satu permintaan ke yang lain, konsumen selalu dapat memeriksa peran mereka dengan cara yang sama.Itu tergantung pada klien. Biasanya Anda dapat menempatkan informasi tersebut dalam bentuk pesan hyptertext (alias HTML) ke dalam tubuh respon dari metode REST. Namun itu hanya masuk akal jika REST API digunakan dengan klien HTML.
Mirip dengan XML dan JSON.
Sunting: Anda mungkin bingung menggunakan API (perluas akronim ini) dengan pemasaran tipe akun / paket pengguna Anda. Saya tidak akan mencampur ini, karena selalu mencurigakan (keputusan bisnis mungkin memerlukan perubahan yang lebih cepat daripada perubahan dalam perangkat lunak untuk mengkomunikasikan tanggapan yang berbeda karena perubahan ini dapat dilakukan pada waktu yang tepat).
Alih-alih memberi tahu pengguna Anda melalui saluran yang berbeda, misalnya dengan buletin apa manfaatnya.
Ini bekerja sangat baik ketika orang yang mendaftar ke layanan bukan orang yang memprogram melawan API. Sebagai contoh:
Jadi pria yang bersenang-senang memprogram ini sebenarnya bukan penerima informasi yang paling mudah.
Atau sebagai respons terhadap login dan metode info-pengguna, berikan semua detail berdarah.
Tetapi ketika seorang pengguna meminta kucing secara terprogram, ia seharusnya sudah mengetahui mengapa ia hanya mendapatkan tiga kucing kembali atau lebih. Tetapi Anda tidak menyelesaikan masalah komunikasi ini dengan kode.
Jika tidak, izinkan mereka untuk meminta lebih dan kemudian memberikan pemberitahuan kegagalan jika hak mereka tidak memadai. Tetapi sekali lagi, itu bukan perangkat lunak yang ramah pengguna.
sumber