Jadi let's mengatakan bahwa kita memiliki sesuatu yang tidak tampak terbaik diwakili sebagai sumber daya (status dari proses yang kita ingin berhenti, bernegara perhitungan yang ingin kita lakukan pada server, dll).
Jika di desain API yang kita gunakan baik proses/123/pause
atau perhitungan/fibonacci
-- adalah bahwa pada dasarnya tidak sesuai dengan SISANYA? Sejauh ini dari apa yang saya baca itu tidak tampak, selama ini Url yang ditemukan menggunakan HATEOAS dan jenis media yang standar.
Atau haruskah aku memilih untuk menempatkan tindakan di pesan serta menjawab di sini?
Catatan 1: Saya memahami bahwa adalah mungkin untuk ulangi beberapa contoh dalam hal kata benda. Namun saya merasa bahwa untuk specific cases kata benda tidak bekerja serta kata kerja lakukan. Jadi saya mencoba untuk memahami jika memiliki orang-orang verba akan segera unRESTful. Dan jika memang begitu, mengapa rekomendasi ini begitu ketat dan manfaat apa yang mungkin saya lewatkan dengan tidak mengikuti dalam kasus tersebut.
Catatan 2: Jawaban "SISANYA tidak memiliki kendala pada" akan menjadi jawaban yang valid (yang berarti bahwa pendekatan ini lebih Nyenyak). Jawaban "itu tergantung pada siapa anda bertanya," atau "itu adalah praktek terbaik" tidak benar-benar menjawab pertanyaan. Pertanyaan itu mengasumsikan konsep SISANYA ada sebagai yang didefinisikan dengan istilah umum ada dua orang yang dapat digunakan untuk merujuk ke set yang sama dari kendala. Jika asumsi itu sendiri adalah tidak benar dan formal diskusi berjalan-jalan, tidak ada artinya, jangan berkata begitu.
Artikel ini memiliki beberapa tips yang baik: http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api
Mengutip dari artikel:
Apa tentang tindakan yang don't masuk ke dunia dari operasi CRUD?
Ini adalah di mana hal-hal yang bisa mendapatkan fuzzy. Ada sejumlah pendekatan:
- Merestrukturisasi tindakan untuk tampil seperti bidang sumber daya. Ini bekerja jika tindakan doesn't mengambil parameter. Misalnya mengaktifkan tindakan dapat dipetakan ke boolean diaktifkan lapangan dan diperbarui melalui sebuah PATCH untuk sumber daya.
- Memperlakukannya seperti sub-sumber daya dengan Tenang prinsip-prinsip. Misalnya, GitHub's API memungkinkan anda bintang inti dengan MENEMPATKAN /gists/:id/bintang dan unstar dengan MENGHAPUS /gists/:id/bintang.
- Kadang-kadang anda benar-benar tidak punya cara untuk memetakan tindakan yang masuk akal Tenang struktur. Misalnya, multi-sumber daya pencarian doesn't benar-benar masuk akal untuk diterapkan ke sumber daya tertentu's akhir. Dalam hal ini kasus /search akan membuat paling masuk akal meskipun itu bukan't sebuah benda. Ini adalah OK - lakukan saja apa yang's benar dari perspektif API konsumen dan pastikan itu's didokumentasikan dengan jelas untuk menghindari kebingungan.
Saya secara pribadi seperti saran #2. Jika anda perlu untuk menunda sesuatu, apa yang kau berhenti? Jika itu's sebuah proses dengan nama, kemudian coba ini:
/process/{processName}/pause
It's tidak benar-benar tentang kata benda vs verba; it's tentang apakah anda adalah:
Apa's sumber daya? Tangkas mendefinisikan thusly:
kunci abstraksi dari informasi di SISA adalah sumber daya. Informasi apapun yang bisa dinamai dapat sumber: dokumen atau gambar, sementara layanan (misalnya "hari ini's cuaca di Los Angeles"), koleksi sumber daya lainnya, non-virtual objek (misalnya orang), dan sebagainya. Dengan kata lain, konsep apapun yang mungkin menjadi target dari seorang penulis's hypertext reference harus cocok dalam definisi sumber daya. Sumber daya konseptual pemetaan untuk suatu set entitas, bukan entitas yang sesuai untuk pemetaan pada setiap titik tertentu dalam waktu.quot;
Sekarang, untuk pertanyaan anda. Anda dapat't hanya terlihat di URL dan berkata, "seperti-dan-seperti URL yang pada dasarnya tidak sesuai dengan SISANYA?" karena Url di SELURUH sistem aren't benar-benar penting. It's lebih penting bahwa Url proses/123/pause
dan perhitungan/fibonacci
mengidentifikasi sumber daya dengan definisi di atas. Jika mereka melakukannya, ada isn't ISTIRAHAT pelanggaran kendala. Jika mereka don't, anda're melanggar seragam antarmuka kendala untuk BERISTIRAHAT. Misalnya anda membuat saya percaya hal itu tidak sesuai dengan definisi sumber daya dan karena itu akan melanggar kendala ini.
Untuk menggambarkan apa sumber daya yang mungkin akan dalam sistem ini, anda bisa mengubah status dari suatu proses POSTing ke berhenti-proses
sumber daya koleksi. Meskipun itu mungkin tidak biasa cara kerja dengan proses, it's tidak mendasar bertentangan dengan SISA gaya arsitektur.
Dalam kasus perhitungan, perhitungan sendiri mungkin menjadi sumber daya dan sumber daya yang mungkin terlihat seperti ini:
Request:
GET /calculations/5
Response:
{
fibonacci: 5,
prime-number: true,
square-root: 2.23607
}
Meskipun lagi-lagi,'s yang agak tidak biasa konsep sumber daya. Saya kira sedikit lebih penggunaan yang khas mungkin terlihat seperti ini:
Request:
GET /stored-calculations/12381728 (note that URL is a random identifier)
Response:
{
number: 5,
fibonacci: 5,
prime-number: true,
square-root: 2.23607
}
meskipun mungkin anda'd ingin menyimpan informasi tambahan tentang sumber daya yang lain dari yang semata-mata perhitungan bahwa siapa pun dapat dilakukan dengan kalkulator...
Response:
{
number: 5,
fibonacci: 5,
prime-number: true,
square-root: 2.23607,
last-accessed-date: 2013-10-28T00:00:00Z,
number-of-retrievals-of-this-resource: 183
}
It's dianggap buruk berlatih menggunakan kata-kata kerja di REST API.
Ada's beberapa materi tentang JADI dan di tempat lain pada mengapa dan bagaimana untuk menghindari menggunakan kata kerja. Bahwa menjadi kata, ada banyak dari "REST" Api yang menggunakan kata kerja.
Untuk anda proses
API, aku akan membuat sumber daya Proses yang memiliki sebuah negara
, yang mana dapat dimodifikasi dengan MENEMPATKAN
.
Misalkan DAPATKAN /proses/$id
saat ini kembali:
{
state: "PAUSED"
}
Kemudian anda MENEMPATKAN
ini /proses/$id
:
{
state: "RUNNING"
}
yang membuat proses perubahan negara.
Dalam kasus Fibonacci, hanya memiliki sumber daya yang bernama fibonacci
, dan menggunakan POST
dengan parameter (misalnya n pertama n bilangan fibonacci) dalam tubuh, atau bahkan mungkin MENDAPATKAN
dengan query di URL.
Metode HTTP is kata kerja: GET, PUT, POST, et cetera, sementara URL harus selalu mengacu pada kata benda (penerima tindakan). Anggap saja seperti ini: Akan two kata kerja dalam kalimat ini masuk akal? "MENDAPATKAN hitung" omong kosong, mana "MENDAPATKAN negara" baik "MENDAPATKAN proses" lebih baik ("negara" menjadi metadata untuk proses).