Apa cara yang tepat untuk melakukan REST?

36

Semua orang saat ini melakukan SOA , bahkan jika beberapa tidak benar-benar mengerti tentang apa itu. Jadi mereka salah melakukannya. Menggunakannya sebagai analogi, saya tahu apa itu REST (atau setidaknya saya pikir saya tahu) dan ingin melakukannya. Tetapi saya ingin melakukannya dengan benar.

Jadi pertanyaan saya adalah apa cara yang tepat untuk melakukan REST?

JohnDoDo
sumber
1
Stack Overflow 'rest' tag wiki tampaknya sedekat yang bisa didapat dengan sumber kanonik dalam konteks jaringan Stack Exchange
gnat
17
Saya hanya memejamkan mata untuk sementara waktu ... mungkin pergi bersepeda dan berbaring.
Edward Strange
Bukankah pada dasarnya REST hanya menggunakan url seperti mydomain.com/accounts dan kata kerja HTTP untuk menjalankan operasi? Di mana kata kerja menunjukkan apakah Anda ingin mendapatkan, membuat, memperbarui atau menghapus data? Ketika saya berpikir REST itulah yang saya pikirkan.
The Muffin Man
2
@Nick, itu adalah interpretasi yang paling umum, 'hal yang nyata' jauh lebih sulit untuk grok, dan (sejauh yang saya tahu) jauh lebih sulit untuk ditemukan benar-benar diterapkan di mana saja ... (lihat jawaban Wilk)
Benjol
3
@Nick pemahaman Anda bukan REST, itu RPC melalui HTTP .

Jawaban:

30

Ya, ada banyak cara untuk belajar bagaimana membangun aplikasi web yang tenang dan tidak, tidak ada cara yang benar dan unik. RESTful bukan standar tetapi menggunakan seperangkat standar (HTTP, URI, Mime Type, ...).

Mulailah dengan ini: Bagaimana Saya Menjelaskan REST kepada istri saya

Kemudian, lanjutkan dengan ini: Cookbook Layanan Web RESTful

Dan kemudian mengerahkan seluruh upaya Anda untuk mengembangkan aplikasi web karena cara terbaik untuk belajar adalah melakukan eksperimen dan Anda dapat belajar banyak dari kesalahan Anda;)

Jangan khawatir jika aplikasi web pertama Anda tidak akan sepenuhnya tenang: Anda akan menemukan cara untuk melakukannya!

Jadi, mengutip Obi-Wan Kenobi, "semoga kekuatan itu menyertai Anda!" ;)

EDIT

Ok, izinkan saya lebih spesifik. Anda ingin membuat webapp yang tenang, ya? Yah, seperti yang saya katakan ada banyak cara untuk melakukannya tetapi ini adalah pedoman utama.

Definisi

REST (Representational State Transfer) adalah gaya arsitektur perangkat lunak untuk sistem terdistribusi (seperti WWW). Ini bukan standar tetapi menggunakan seperangkat standar: HTTP, AJAX, HTML, URI, Mime Type, dll. Kita berbicara tentang representasi sumber daya, bukan tentang sumber daya itu sendiri. Diambil dari 'Bagaimana saya menjelaskan REST kepada istri saya':

Istri : Halaman web adalah sumber daya?

Ryan : Agak. Halaman web adalah representasi dari sumber daya. Sumber daya hanyalah konsep.

Kendala Arsitektur

  • Client-Server : client dan server dipisahkan oleh Uniform Interface (dijelaskan di bawah).
  • Stateless : komunikasi server-klien dilakukan tanpa menyimpan keadaan klien tertentu di server.
  • Cachable : klien mungkin memiliki cache tanggapan dari permintaan yang sudah dibuat.
  • Layered System : klien tidak tahu apakah itu terhubung langsung dengan end-server atau jika komunikasi dilakukan melalui perantara.

Antarmuka Seragam

  • Identifikasi Sumber Daya : setiap sumber daya harus diidentifikasi oleh URI.
  • Protokol : untuk mendapatkan klien komunikasi dan server, protokol harus dilakukan sebelumnya. Setiap permintaan mungkin memiliki Jenis MIME yang tepat (aplikasi / xml, teks / html, aplikasi / rdf + xml, dll.), Header kanan dan metode HTTP yang tepat (lihat deskripsi CRUD di bawah).

CRUD

Oke, kami melihat bahwa untuk mengidentifikasi sumber daya, kami dapat menggunakan URI, tetapi kami membutuhkan sesuatu yang lain untuk tindakan (menambah, memodifikasi, menghapus, dll.): Selamat datang di CRUD (Buat, Baca, Perbarui dan Hapus).

  • Buat { HTTP: POST } { SQL: INSERT } => buat sumber daya baru
  • Baca { HTTP: GET } { SQL: SELECT } => dapatkan sumber daya
  • Perbarui { HTTP: PUT } { SQL: UPDATE } => ubah sumber daya
  • Hapus { HTTP: DELETE } { SQL: DELETE } => hapus sumber daya

Sekarang, mengenai PUT dan HAPUS, beberapa masalah teknologi dapat muncul (Anda akan mendapatkannya dengan bentuk HTML): sering pengembang memintas masalah ini menggunakan POST untuk setiap permintaan 'PUT' dan 'HAPUS'. Secara resmi, Anda harus menggunakan PUT dan DELETE. Omong-omong, lakukan apa yang Anda inginkan. Pengalaman saya mendorong saya untuk menggunakan POST dan GET setiap waktu.

--- Bagian selanjutnya harus digunakan tetapi itu bukan ikatan REST: ini menyangkut Data Terkait ---

URI

URI abstrak dari detail teknis! Ucapkan selamat tinggal pada URI sebagai berikut:

http://www.example.com/index.php?query=search&id=9823&date=08272012

URI desain ulang! Ambil tautan di atas dan ubah sebagai berikut:

http://www.example.com/search/2012/08/27/9823

Itu jauh lebih baik, ya? Itu bisa dilakukan dengan:

Hal lain: gunakan URI yang berbeda untuk mewakili sumber daya yang berbeda:

Perhatikan : about.html dan about.rdf bukan file! Mereka bisa menjadi hasil dari transformasi XSLT!

Negosiasi Konten

Jika Anda telah mencapai titik ini, selamat! Mungkin, Anda siap untuk mendapatkan konsep yang lebih abstrak karena kami memasukkan rincian teknis Web Semantic;) Nah, ketika klien Anda menginginkan sumber daya, biasanya ia membuat permintaan berikut:

GET http://www.example.com/about
Accept: application/rdf+xml

Tetapi server tidak akan merespons dengan about.rdf karena memiliki URI yang berbeda ( http://www.example.com/about.rdf ). Jadi, mari kita lihat pola 303 ! Server akan mengembalikan ini:

303 See Other
Location: http://www.example.com/about.rdf

Dan klien akan mengikuti tautan yang dikembalikan sebagai berikut:

GET http://www.example.com/about.rdf
Accept: application/rdf+xml

Akhirnya, server akan mengembalikan sumber daya yang diminta:

200 OK
about.rdf

Jangan khawatir: aplikasi klien Anda tidak akan melakukan hal ini! Pola 303 harus dilakukan oleh aplikasi server dan browser Anda akan melakukan sisanya;)

Kesimpulan

Seringkali teorinya jauh, jauh dari praktik. Ya, sekarang Anda tahu cara mendesain dan mengembangkan aplikasi RESTful tetapi pedoman di atas hanyalah sebuah petunjuk. Anda akan menemukan cara terbaik untuk membangun aplikasi web dan mungkin itu tidak akan sama dengan yang diinginkan teori. Jangan peduli: D!

Bibliografi

Layanan Web Tenang, Sameer Tyagi

API REST harus berbasis hiperteks, Roy Thomas Fielding

Layanan web yang tenang: Dasar-dasarnya, Alex Rodriguez

Alur Kerja REST Webber

Sial
sumber
1
Anda dapat mempertimbangkan untuk menambahkan tautan ini , yang merupakan panduan paling lengkap yang pernah saya jumpai.
Benjol
Saya telah melihat PUT dan POST digunakan dengan artinya ditukar (sehubungan dengan jawaban Anda): POST -> create, PUT -> pembaruan. Adakah gagasan yang maknanya lebih banyak digunakan?
Andres F.
@Andres F .: jcalcote.wordpress.com/2008/10/16/… mengatakan: Buat = PUT jika Anda mengirim konten lengkap dari sumber daya yang ditentukan (URL). Buat = POST jika Anda mengirim perintah ke server untuk membuat bawahan sumber daya yang ditentukan, menggunakan beberapa algoritma sisi server. Pembaruan = TETAP jika Anda memperbarui konten lengkap dari sumber daya yang ditentukan. Perbarui = POST jika Anda meminta server untuk memperbarui satu atau lebih bawahan dari sumber daya yang ditentukan.
Wilk
@Benjol: Saya akan mengedit dengan saran Anda;) Terima kasih!
Wilk
1
@Wilk Beberapa hal yang perlu dipertimbangkan! Mungkin mengapa tidak ada yang memperbaiki ini: P
Andres F.
5

buku Alkitab ISTIRAHAT atau sesuatu ....

Tidak perlu buku Alkitab; Saya memiliki pertanyaan yang persis sama, dan mempelajari semua yang saya butuhkan atau ingin ketahui tentang REST dengan membaca tiga artikel ini:

  1. Pengantar Pemula untuk HTTP dan REST dari Net Tuts +
  2. Layanan web yang tenang: Dasar-dasar dari IBM developerWorks
  3. HTTP tenang dalam praktiknya dari InfoQ

Tetapi saya ingin melakukannya dengan benar.

Seperti yang akan Anda baca di artikel di atas, kuncinya adalah memikirkan potongan-potongan yang dapat diakses dari aplikasi Anda sebagai "sumber daya" yang dapat dibuat, diambil, diperbarui, atau dihapus menggunakan "kata kerja" HTTP yang ada: GET, PUT, POST , MENGHAPUS.

Juga, ketahui perbedaan antara PUT dan POST , dan kapan menggunakannya. DAPATKAN, PUT, DAN HAPUS seharusnya transaksi idempoten, POST tidak boleh.

Selain itu, manfaatkan kode status HTTP saat berkomunikasi kembali ke klien.

CFL_Jeff
sumber