Sementara garis agak kabur, bagi saya aturan praktis adalah: data yang logika bisnis Anda bekerja harus ada di tubuh, metadata bisa / harus dimasukkan ke dalam header.
Cara lain untuk melihatnya adalah: data yang hanya muncul dalam jenis permintaan tertentu harus ada di badan sementara data yang ditangani secara konsisten di seluruh aplikasi harus dimasukkan ke header.
Namun sudut pandang lain adalah: dapatkah Anda membayangkan bahwa sepotong data ditangani secara global, misalnya oleh router / firewall daripada oleh aplikasi Anda? Jika ya, itu mungkin harus di header daripada di tubuh.
Beberapa contoh penerapan aturan ini adalah:
- Kredensial keamanan masuk ke header karena kemungkinan besar mereka akan ditangani sama di semua tempat aplikasi; pada tingkat implementasi mungkin akan ada beberapa filter permintaan yang menolak permintaan tanpa kredensial yang valid terlepas dari titik akhir yang sebenarnya menangani permintaan jika itu melewati filter.
- Jika, di sisi lain, Anda memiliki titik akhir yang memungkinkan admin untuk menambahkan pengguna ke sistem Anda, login pengguna yang akan dibuat harus ada di badan permintaan karena: a) ditangani oleh logika bisnis aplikasi Anda, b) muncul di titik akhir khusus ini tetapi tidak pada orang lain.
- Opsi yang mengontrol caching mungkin cocok dengan header (kecuali caching adalah bagian inti dari logika bisnis aplikasi Anda).
Kembali ke pertanyaan Anda tentang ID perangkat unik: jika digunakan secara konsisten di mana-mana, mis. Hanya untuk masuk, itu bisa dimasukkan ke dalam header. Tetapi jika digunakan untuk menyaring permintaan dengan cara yang berbeda tergantung pada titik akhir, lebih baik berada di tubuh. Tentu saja jika Anda memiliki kedua kasus penggunaan, mungkin lebih baik tetap menggunakan hanya satu cara untuk melewatinya (mungkin tajuk) daripada memaksa pengguna API untuk meletakkan data yang sama di dua tempat, memberi Anda dilema jika memungkinkan input yang tidak konsisten atau menerapkan semacam validasi.