Apa sebenarnya yang Tenang pemrograman?

Apa sebenarnya yang Tenang pemrograman?

Mengomentari pertanyaan (9)

ISTIRAHAT apakah yang mendasari prinsip arsitektur web. Hal yang menakjubkan tentang web adalah kenyataan bahwa klien (browser) dan server dapat saling berinteraksi dalam cara yang kompleks tanpa klien mengetahui apa-apa sebelumnya tentang server dan sumber daya host. Kunci kendala adalah bahwa server dan client harus sama-sama setuju pada media digunakan, yang dalam kasus web HTML.

API yang menganut prinsip-prinsip ISTIRAHAT tidak memerlukan klien untuk tahu apa-apa tentang struktur dari API. Sebaliknya, kebutuhan server untuk memberikan informasi apapun kebutuhan klien untuk berinteraksi dengan layanan. An form HTML contoh ini: server menentukan lokasi sumber daya dan kolom yang diperlukan. Browser doesn't tahu terlebih dahulu di mana untuk mengirimkan informasi, dan itu doesn't mengetahui terlebih dahulu informasi apa yang akan dikirim. Kedua bentuk informasi yang seluruhnya disediakan oleh server. (Prinsip ini disebut HATEOAS: Hypermedia Sebagai Mesin Negara Aplikasi.)

Jadi, bagaimana hal ini berlaku untuk HTTP, dan bagaimana hal itu dapat dilaksanakan dalam praktek? HTTP adalah berorientasi pada kata kerja dan sumber daya. Dua kata kerja dalam mainstream penggunaan MENDAPATKAN dan POST, yang saya pikir semua orang akan mengenali. Namun, HTTP standar mendefinisikan beberapa orang lain seperti MASUKAN dan DELETE. Kata ini kemudian diterapkan untuk sumber daya, sesuai dengan petunjuk yang disediakan oleh server.

Misalnya, Let's membayangkan bahwa kita memiliki database pengguna yang dikelola oleh layanan web. Kami menggunakan layanan custom hypermedia berdasarkan JSON, yang kami menetapkan tipe mime application/json+userdb (Ada juga mungkin yang application/xml+userdb dan aplikasi/apapun+userdb - banyak jenis media yang dapat didukung). Klien dan server memiliki keduanya telah diprogram untuk memahami format ini, tetapi mereka don't tahu apa-apa tentang satu sama lain. Sebagai Roy Fielding poin:

A REST API harus menghabiskan hampir semua deskriptif dalam upaya mendefinisikan tipe media(s) yang digunakan untuk mewakili sumber daya dan mengemudi aplikasi negara, atau dalam mendefinisikan diperpanjang hubungan nama dan/atau hypertext-enabled mark-up yang sudah ada standar jenis media.

Permintaan untuk dasar sumber daya / mungkin kembali sesuatu seperti ini:

Permintaan

GET /
Accept: application/json+userdb

Respon

200 OK
Content-Type: application/json+userdb

{
    "version": "1.0",
    "links": [
        {
            "href": "/user",
            "rel": "list",
            "method": "GET"
        },
        {
            "href": "/user",
            "rel": "create",
            "method": "POST"
        }
    ]
}

Kita tahu dari keterangan media kita bahwa kita dapat menemukan informasi tentang sumber daya terkait dari bagian-bagian yang disebut "link". Ini disebut Hypermedia kontrol. Dalam hal ini, dapat kita lihat dari bagian seperti yang kita dapat menemukan daftar pengguna dengan membuat permintaan lain untuk pengguna:

Permintaan

GET /user
Accept: application/json+userdb

Respon

200 OK
Content-Type: application/json+userdb

{
    "users": [
        {
            "id": 1,
            "name": "Emil",
            "country: "Sweden",
            "links": [
                {
                    "href": "/user/1",
                    "rel": "self",
                    "method": "GET"
                },
                {
                    "href": "/user/1",
                    "rel": "edit",
                    "method": "PUT"
                },
                {
                    "href": "/user/1",
                    "rel": "delete",
                    "method": "DELETE"
                }
            ]
        },
        {
            "id": 2,
            "name": "Adam",
            "country: "Scotland",
            "links": [
                {
                    "href": "/user/2",
                    "rel": "self",
                    "method": "GET"
                },
                {
                    "href": "/user/2",
                    "rel": "edit",
                    "method": "PUT"
                },
                {
                    "href": "/user/2",
                    "rel": "delete",
                    "method": "DELETE"
                }
            ]
        }
    ],
    "links": [
        {
            "href": "/user",
            "rel": "create",
            "method": "POST"
        }
    ]
}

Kami dapat memberitahu banyak dari respon ini. Misalnya, kita sekarang tahu bahwa kita dapat membuat user baru dengan POST-ing untukpengguna`:

Permintaan

POST /user
Accept: application/json+userdb
Content-Type: application/json+userdb

{
    "name": "Karl",
    "country": "Austria"
}

Respon

201 Created
Content-Type: application/json+userdb

{
    "user": {
        "id": 3,
        "name": "Karl",
        "country": "Austria",
        "links": [
            {
                "href": "/user/3",
                "rel": "self",
                "method": "GET"
            },
            {
                "href": "/user/3",
                "rel": "edit",
                "method": "PUT"
            },
            {
                "href": "/user/3",
                "rel": "delete",
                "method": "DELETE"
            }
        ]
    },
    "links": {
       "href": "/user",
       "rel": "list",
       "method": "GET"
    }
}

Kita juga tahu bahwa kita bisa mengubah data yang ada:

Permintaan

PUT /user/1
Accept: application/json+userdb
Content-Type: application/json+userdb

{
    "name": "Emil",
    "country": "Bhutan"
}

Respon

200 OK
Content-Type: application/json+userdb

{
    "user": {
        "id": 1,
        "name": "Emil",
        "country": "Bhutan",
        "links": [
            {
                "href": "/user/1",
                "rel": "self",
                "method": "GET"
            },
            {
                "href": "/user/1",
                "rel": "edit",
                "method": "PUT"
            },
            {
                "href": "/user/1",
                "rel": "delete",
                "method": "DELETE"
            }
        ]
    },
    "links": {
       "href": "/user",
       "rel": "list",
       "method": "GET"
    }
}

Perhatikan bahwa kita menggunakan yang berbeda HTTP verba (GET, PUT, POST, HAPUS, dll.) untuk memanipulasi sumber daya ini, dan bahwa satu-satunya pengetahuan yang kita kira pada klien's bagian ini kita definisi media.

Bacaan lebih lanjut:

(Jawaban ini telah menjadi subyek dari sejumlah kritik untuk hilang titik. Untuk sebagian besar, yang telah yang adil kritik. Apa yang saya awalnya dijelaskan lebih sejalan dengan cara ISTIRAHAT yang biasanya dilaksanakan beberapa tahun yang lalu ketika pertama kali saya menulis ini, bukan arti yang sebenarnya. I've direvisi jawaban untuk lebih mewakili arti sebenarnya.)

Komentar (39)
Larutan

An gaya arsitektur disebut ISTIRAHAT (rest) menganjurkan bahwa aplikasi web harus menggunakan HTTP seperti itu awalnya dibayangkan. Lookup harus menggunakan AMBIL permintaan. MENEMPATKAN, POST, dan HAPUS permintaan harus digunakan untuk mutasi, penciptaan, dan penghapusan masing-masing.

SISA pendukung cenderung mendukung Url, seperti

http://myserver.com/catalog/item/1729

tapi arsitektur tidak memerlukan ini "Url cantik". MENDAPATKAN permintaan dengan parameter

http://myserver.com/catalog?item=1729

adalah setiap bit sebagai Nyenyak.

Perlu diingat bahwa MENDAPATKAN permintaan tidak boleh digunakan untuk memperbarui informasi. Misalnya, MENDAPATKAN permintaan untuk menambahkan item ke keranjang

http://myserver.com/addToCart?cart=314159&item=1729

tidak akan sesuai. MENDAPATKAN permintaan harus idempotent. Yaitu, mengeluarkan permintaan dua kali harus ada yang berbeda dari penerbitan sekali. Yang's apa yang membuat permintaan disimpan di cache. Sebuah "add to cart" permintaan tidak idempotent—mengeluarkan dua kali menambahkan dua salinan dari item ke keranjang. POSTING permintaan jelas tepat dalam konteks ini. Dengan demikian, bahkan RESTful web aplikasi kebutuhan pangsa permintaan POST.

Ini diambil dari buku yang sangat bagus Inti JavaServer faces buku oleh David M. Geary.

Komentar (7)

Tenang pemrograman adalah tentang:

  • sumber daya yang diidentifikasi oleh pengenal tetap: Uri adalah di mana-mana pilihan pengenal hari ini
  • sumber daya yang dimanipulasi dengan menggunakan seperangkat kata kerja: HTTP metode ini adalah sering melihat kasus - yang mulia Membuat, Mengambil, Update, Hapus menjadi POST, GET, PUT, dan DELETE. Tapi SISANYA tidak terbatas untuk HTTP, itu adalah salah satu yang paling umum digunakan transportasi sekarang.
  • sebenarnya representasi diambil untuk sumber daya yang tergantung pada permintaan dan tidak identifier: menggunakan header Accept untuk mengontrol apakah anda ingin XML, HTTP, atau bahkan Objek Java yang mewakili sumber daya
  • mempertahankan keadaan di objek dan mewakili negara dalam representasi
  • mewakili hubungan antara sumber daya dalam representasi sumber daya: hubungan antara benda-benda yang tertanam langsung dalam representasi
  • sumber daya pernyataan yang menjelaskan bagaimana representasi yang dapat digunakan dan dalam keadaan apa harus dibuang/refetched secara konsisten: penggunaan HTTP header Cache-Control

Yang terakhir ini mungkin yang paling penting dalam hal konsekuensi dan efektivitas keseluruhan dari SISANYA. Secara keseluruhan, sebagian besar Tenang diskusi tampaknya center pada HTTP dan penggunaan dari browser dan apa yang tidak. Saya memahami bahwa R. Tangkas menciptakan istilah ketika ia menggambarkan arsitektur dan keputusan-keputusan yang mengarah ke HTTP. Tesis adalah lebih lanjut tentang arsitektur dan cache-kemampuan sumber daya dari itu adalah tentang HTTP.

Jika anda benar-benar tertarik pada apa yang Tenang arsitektur dan mengapa ia bekerja, baca tesis beberapa kali dan membaca semuanya bukan hanya Bab 5! Berikutnya melihat ke mengapa DNS bekerja. Baca tentang organisasi hierarki DNS dan bagaimana arahan kerja. Kemudian membaca dan mempertimbangkan bagaimana DNS caching bekerja. Akhirnya, baca spesifikasi HTTP (RFC2616 dan RFC3040 secara khusus) dan mempertimbangkan bagaimana dan mengapa caching bekerja dengan cara itu. Pada akhirnya, itu hanya akan klik. Wahyu terakhir bagi saya adalah ketika saya melihat kesamaan antara DNS dan HTTP. Setelah ini, pemahaman mengapa SOA dan Message Passing Interface yang terukur mulai klik.

Saya pikir yang paling penting trik untuk memahami arsitektur pentingnya dan kinerja implikasi yang Tenang dan Berbagi apa-Apa arsitektur adalah untuk menghindari semakin tergantung pada teknologi dan rincian pelaksanaan. Berkonsentrasi pada siapa yang memiliki sumber daya, yang bertanggung jawab untuk menciptakan/menjaga mereka, dll. Kemudian berpikir tentang representasi, protokol, dan teknologi.

Komentar (13)

Ini adalah apa yang mungkin terlihat seperti.

Membuat user dengan tiga sifat:

POST /user
fname=John&lname=Doe&age=25

Server merespon:

200 OK
Location: /user/123

Di masa depan, maka anda dapat mengambil informasi pengguna:

GET /user/123

Server merespon:

200 OK
JohnDoe25

Untuk memodifikasi record (lname dan usia akan tetap tidak berubah):

PATCH /user/123
fname=Johnny

Untuk memperbarui catatan (dan akibatnya lname dan usia akan BATAL):

PUT /user/123
fname=Johnny
Komentar (5)

Sebuah buku besar di REST BERISTIRAHAT dalam Praktek.

Harus dibaca rest (ISTIRAHAT) dan REST Api harus hypertext-driven

Lihat Martin Fowlers artikel Richardson Model Kematangan (RMM) untuk penjelasan tentang apa yang Tenang dengan layanan ini.

Untuk menjadi Tenang Layanan kebutuhan untuk memenuhi Hypermedia sebagai Mesin kondisi Aplikasi. (HATEOAS), yaitu, kebutuhan untuk mencapai tingkat 3 di RMM, baca artikel untuk rincian atau slide dari qcon bicara.

HATEOAS kendala adalah akronim untuk Hypermedia sebagai Mesin Aplikasi Negara. Prinsip ini kunci pembeda antara ISTIRAHAT dan kebanyakan bentuk lain dari client server system.

...

klien Tenang kebutuhan aplikasi hanya tahu satu tetap URL untuk mengakses hal. Semua tindakan masa depan harus dapat ditemukan secara dinamis dari hypermedia tautan yang disertakan dalam representasi dari sumber daya yang kembali dari URL tersebut. Standar jenis media juga diharapkan dapat dipahami oleh setiap klien yang mungkin menggunakan API Tenang. (From Wikipedia, the free encyclopedia)

SISA Tes Lakmus untuk Web Framework adalah serupa kematangan tes untuk web framework.

Mendekati murni ISTIRAHAT: Belajar untuk mencintai HATEOAS adalah koleksi link.

SISA terhadap SABUN untuk Cloud Publik membahas tingkat saat ini dari SISA pemakaian.

Jalan-jalan dan versi membahas Diperpanjang, Versi, Evolvability, dll. melalui Modifiability

Komentar (2)

Apa SISANYA?

SISANYA adalah singkatan dari rest. (Hal ini kadang-kadang dieja "ReST".) Hal itu bergantung pada bernegara, client-server, disimpan di cache protokol komunikasi-dan di hampir semua kasus, HTTP protokol yang digunakan.

SISANYA adalah sebuah gaya arsitektur untuk merancang jaringan aplikasi. idenya adalah bahwa, daripada menggunakan mekanisme yang kompleks seperti CORBA, RPC atau SABUN untuk menghubungkan antara mesin-mesin, sederhana HTTP digunakan untuk membuat panggilan antara mesin.

Dalam banyak hal, World Wide Web itu sendiri, yang didasarkan pada HTTP, dapat dilihat sebagai SISA berbasis arsitektur. Tenang aplikasi menggunakan permintaan HTTP untuk mengirim data (membuat dan/atau update), membaca data (misalnya, membuat query), dan menghapus data. Dengan demikian, SISANYA menggunakan HTTP untuk semua empat CRUD (Buat/Read/Update/Delete) operasi.

SISANYA adalah alternatif yang lebih ringan untuk mekanisme seperti RPC (Remote Procedure Calls) dan Web Services (SOAP, WSDL, et al.). Kemudian, kami akan melihat seberapa jauh lebih sederhana SISANYA.

Meskipun sederhana, SISANYA adalah sepenuhnya fitur; ada's pada dasarnya ada yang dapat anda lakukan di Layanan Web yang dapat't dilakukan dengan Tenang arsitektur. SISANYA tidak "standar". Tidak akan pernah ada W3C recommendataion untuk ISTIRAHAT, misalnya. Dan sementara ada SISA kerangka pemrograman, bekerja dengan ISTIRAHAT yang sangat sederhana bahwa anda dapat sering "roll anda sendiri" dengan standar fitur perpustakaan dalam bahasa seperti Perl, Java, atau C#.

Salah satu referensi terbaik yang saya temukan ketika saya mencoba untuk menemukan nyata sederhana yang berarti istirahat.

http://rest.elkstein.org/

Komentar (1)

SISANYA menggunakan berbagai metode HTTP (terutama MENDAPATKAN/PASANG/HAPUS) untuk memanipulasi data.

Daripada menggunakan URL tertentu untuk menghapus metode (katakanlah, /user/123/hapus), anda akan mengirim MENGHAPUS permintaan ke /user/[id] URL, untuk mengedit pengguna, untuk mengambil informasi pada pengguna anda mengirim permintaan GET /user/[id]

Misalnya, bukan satu set Url yang mungkin terlihat seperti beberapa hal berikut..

GET /delete_user.x?id=123
GET /user/delete
GET /new_user.x
GET /user/new
GET /user?id=1
GET /user/id/1

Anda menggunakan HTTP "kata kerja" dan memiliki..

GET /user/2
DELETE /user/2
PUT /user
Komentar (5)

It's pemrograman di mana arsitektur dari sistem anda cocok SISA gaya ditata oleh Roy Fielding di tesis. Karena ini adalah gaya arsitektur yang menggambarkan web (lebih atau kurang), banyak orang yang tertarik di dalamnya.

Bonus menjawab: Tidak ada. Kecuali anda're mempelajari arsitektur perangkat lunak seperti akademik atau merancang web services, ada's benar-benar tidak ada alasan untuk pernah mendengar istilah.

Komentar (4)

Saya akan mengatakan Tenang pemrograman akan membuat sistem (API) yang mengikuti SELURUH gaya arsitektur.

Saya menemukan ini fantastis, singkat, dan mudah untuk memahami tutorial tentang SISANYA oleh Dr. M. Elkstein dan mengutip bagian penting yang akan menjawab pertanyaan anda untuk sebagian besar:

Belajar SISA: Tutorial

SISANYA adalah gaya arsitektur untuk merancang jaringan aplikasi. idenya adalah bahwa, daripada menggunakan mekanisme yang kompleks seperti CORBA, RPC atau SABUN untuk menghubungkan antara mesin-mesin, sederhana HTTP digunakan untuk membuat panggilan antara mesin.

  • Dalam banyak hal, World Wide Web itu sendiri, yang didasarkan pada HTTP, dapat dilihat sebagai SISA berbasis arsitektur.

Tenang aplikasi menggunakan permintaan HTTP untuk mengirim data (membuat dan/atau update), membaca data (misalnya, membuat query), dan menghapus data. Dengan demikian, SISA menggunakan HTTP untuk semua empat CRUD (Create/Baca/Update/Delete) operasi.

Saya don't pikir anda harus merasa bodoh karena tidak mendengar tentang SISANYA di luar Stack Overflow..., aku akan berada dalam situasi yang sama!; jawaban untuk hal lain yang JADI pertanyaan di Mengapa BERISTIRAHAT semakin besar sekarang bisa meringankan perasaan.

Komentar (1)

Saya minta maaf jika saya'm tidak menjawab pertanyaan secara langsung, tapi itu's mudah untuk memahami semua ini dengan lebih rinci contoh. Tangkas ini tidak mudah untuk memahami karena semua abstraksi dan terminologi.

Ada's contoh yang cukup baik berikut ini:

Menjelaskan jalan-jalan dan Hypertext: Spam-E Spam Robot Pembersih

Dan bahkan lebih baik, di sana's bersih penjelasan dengan contoh-contoh sederhana berikut ini (powerpoint lebih komprehensif, tetapi anda bisa mendapatkan sebagian besar dari itu dalam versi html):

http://www.xfront.com/REST.ppt atau http://www.xfront.com/REST.html

Setelah membaca contoh, saya bisa melihat mengapa Ken mengatakan bahwa SISANYA adalah hypertext-driven. I'm tidak benar-benar yakin bahwa ia's benar, karena yang /user/123 adalah URI yang menunjuk ke sumber daya, dan's tidak jelas bagi saya bahwa itu's unRESTful hanya karena klien tahu tentang hal itu "out-of-band."

Yang xfront dokumen yang menjelaskan perbedaan antara ISTIRAHAT dan SABUN, dan ini benar-benar membantu juga. Ketika Fielding mengatakan, "Yaitu RPC. Jeritan RPC.", it's jelas bahwa RPC tidak Tenang, sehingga's berguna untuk melihat alasan yang tepat untuk ini. (SABUN adalah jenis RPC.)

Komentar (1)

Apa SISANYA?

SISANYA dalam kata-kata resmi, SISANYA adalah sebuah gaya arsitektur yang dibangun pada prinsip-prinsip tertentu menggunakan saat ini "Web" dasar-dasar. Ada 5 dasar dasar web yang dimanfaatkan untuk membuat layanan SISA.

Prinsip 1: Segala sesuatu adalah Sumber daya Di SISA gaya arsitektur, fungsi dan data yang dianggap sumber daya dan diakses menggunakan Uniform Resource Identifier (Uri), biasanya link pada Web. Prinsip 2: Setiap Sumber daya yang Diidentifikasi oleh Unique Identifier (URI) Prinsip 3: Gunakan Sederhana dan Antarmuka Seragam Prinsip 4: Komunikasi yang Dilakukan oleh Representasi Prinsip 5: Menjadi Tanpa Kewarganegaraan

Komentar (1)

Aku melihat sekelompok jawaban yang mengatakan menempatkan segala sesuatu tentang pengguna 123 pada sumber daya "/user/123" lebih Tenang.

Roy Fielding, yang menciptakan istilah, kata REST Api harus hypertext-driven. Secara khusus, "SISA API tidak harus mendefinisikan tetap nama sumber daya atau hierarki".

Jadi jika anda "/user/123" jalan hardcoded pada klien, it's tidak benar-benar Tenang. Penggunaan yang baik dari HTTP, mungkin, mungkin tidak. Tetapi tidak Tenang. Itu harus datang dari hypertext.

Komentar (8)

Jawabannya sangat sederhana, ada disertasi ditulis oleh Roy Fielding.]1 Dalam disertasinya ia mendefinisikan SISANYA prinsip-prinsip. Jika aplikasi memenuhi semua prinsip-prinsip tersebut, maka itu merupakan SISA aplikasi. Istilah Tenang diciptakan karena ppl habis kata SISANYA dengan memanggil mereka non-SISA aplikasi seperti ISTIRAHAT. Setelah itu istilah Nyenyak kelelahan juga. Saat ini kita berbicara tentang Api Web dan Hypermedia Api, karena sebagian dari apa yang disebut SISA aplikasi yang tidak memenuhi HATEOAS bagian dari antarmuka seragam kendala. SISANYA kendala adalah sebagai berikut:

  1. arsitektur client-server Sehingga tidak bekerja dengan misalnya PUB/SUB soket, hal ini didasarkan pada REQ/REP.
  2. stateless komunikasi Sehingga server tidak mempertahankan negara dari klien. Ini berarti bahwa anda tidak dapat menggunakan server side penyimpanan sesi dan anda harus mengotentikasi setiap permintaan. Klien anda mungkin mengirim basic auth header melalui koneksi terenkripsi. (Dengan aplikasi yang besar ini sulit untuk mempertahankan banyak sesi.)
  3. penggunaan cache jika anda dapat Sehingga anda don't harus melayani permintaan yang sama lagi dan lagi.
  4. seragam antarmuka umum sebagai kontrak antara klien dan server Kontrak antara klien dan server tidak dikelola oleh server. Dengan kata lain klien harus dipisahkan dari pelaksanaan pelayanan. Anda dapat mencapai keadaan ini dengan menggunakan larutan standar, seperti IRI (URI) standar untuk mengidentifikasi sumber daya, HTTP standar untuk bertukar pesan, standar jenis MIME untuk menggambarkan tubuh serialisasi format, metadata (mungkin RDF vocabs, microformats, dll.) untuk menggambarkan semantik dari bagian-bagian yang berbeda dari tubuh pesan. Untuk memisahkan IRI struktur dari klien, anda harus mengirim hyperlink untuk klien di hypermedia format seperti (HTML, JSON-LD, HAL, dll.). Sehingga klien dapat menggunakan metadata (mungkin link hubungan, RDF vocab) yang ditugaskan untuk hyperlink untuk menavigasi mesin negara dari aplikasi melalui tepat transisi negara dalam rangka mencapai tujuannya. Misalnya bila seorang klien ingin mengirim pesanan ke webshop, maka harus memeriksa hyperlink dalam tanggapan dikirim oleh webshop. Dengan memeriksa link ini mendirikan satu dijelaskan dengan http://schema.org/OrderAction. Klien tahu schema.org vocab, sehingga ia mengerti bahwa dengan mengaktifkan hyperlink ini akan mengirim pesanan. Sehingga mengaktifkan hyperlink dan mengirimkan POST https://example.com/api/v1/order pesan dengan tubuh yang tepat. Setelah itu proses layanan pesan dan merespon dengan hasil yang tepat status HTTP header, misalnya 201 - dibuat dengan sukses. Untuk keterangan pesan dengan rinci metadata larutan standar dengan menggunakan format RDF, misalnya JSON-LD dengan SISA vocab, misalnya Hydra dan domain tertentu vocabs seperti schema.org atau lainnya data terkait vocab dan mungkin aplikasi kustom vocab tertentu jika diperlukan. Sekarang ini tidak mudah, yang's mengapa kebanyakan ppl gunakan dan HAL sederhana lainnya format yang biasanya hanya memberikan SISA vocab, tapi tidak ada data terkait dukungan.
  5. membangun sistem berlapis untuk meningkatkan skalabilitas SELURUH sistem ini terdiri dari lapisan hirarkis. Setiap layer berisi komponen-komponen yang menggunakan jasa dari komponen-komponen yang berada di lapisan berikutnya di bawah ini. Jadi, anda dapat menambahkan lapisan baru dan komponen mudah. Misalnya ada klien lapisan yang berisi klien dan di bawah ini bahwa ada service layer yang berisi satu layanan. Sekarang anda dapat menambahkan sisi client cache di antara mereka. Setelah itu anda dapat menambahkan layanan lain contoh dan load balancer, dan sebagainya... kode klien dan kode layanan won't perubahan.
  6. kode pada permintaan untuk memperpanjang klien fungsi Kendala ini adalah opsional. Misalnya anda dapat mengirim parser untuk tertentu jenis media untuk klien, dan sebagainya... Dalam rangka untuk melakukan ini, anda mungkin perlu plugin standar loader sistem di klien, atau klien anda akan digabungkan dengan plugin loader solusi. SISANYA kendala hasilnya sangat scalable sistem di mana klien dipisahkan dari implementasi layanan. Sehingga klien dapat dapat digunakan kembali, umum seperti browser pada web. Klien dan layanan berbagi standar yang sama dan vocabs, sehingga mereka dapat memahami satu sama lain meskipun fakta bahwa klien tidak tahu rincian pelaksanaan layanan. Hal ini membuat mungkin untuk membuat otomatis klien yang dapat menemukan dan memanfaatkan layanan lain untuk mencapai tujuan mereka. Dalam jangka panjang ini klien dapat berkomunikasi satu sama lain dan saling percaya dengan tugas-tugas, sama seperti manusia. Jika kita menambahkan pola pembelajaran untuk klien tersebut, maka hasilnya akan menjadi salah satu atau lebih AI menggunakan web dari mesin, bukan dari sebuah server tunggal parkir. Jadi, pada akhir impian Berners Lee: web semantik dan kecerdasan buatan akan menjadi kenyataan. Sehingga pada tahun 2030 kita akhirnya dihentikan oleh Skynet. Sampai kemudian ... ;-)
Komentar (0)

Tenang (rest) API pemrograman web menulis aplikasi dalam bahasa pemrograman apapun dengan mengikuti 5 software dasar gaya arsitektur prinsip-prinsip:

  1. Sumber daya (data, informasi).
  2. Unik global identifier (semua sumber daya yang unik diidentifikasi oleh URI).
  3. Seragam interface - penggunaan sederhana dan antarmuka standar (HTTP).
  4. Representasi - semua komunikasi dilakukan dengan representasi (misalnya XML/JSON)
  5. Bernegara (setiap permintaan yang terjadi dalam isolasi lengkap, it's mudah untuk cache dan load-balance),

Dengan kata lain anda're tulisan sederhana point-to-point jaringan aplikasi melalui HTTP yang menggunakan kata kerja seperti GET, POST, PUT, atau MENGHAPUS dengan menerapkan Tenang arsitektur yang mengusulkan standarisasi interface masing-masing "sumber daya" memperlihatkan. Itu adalah apa-apa yang saat ini menggunakan fitur web dalam cara yang sederhana dan efektif (sangat sukses, terbukti dan arsitektur terdistribusi). Ini adalah sebuah alternatif untuk lebih mekanisme yang kompleks seperti SABUN, CORBA dan RPC.

Tenang pemrograman sesuai dengan arsitektur Web desain dan, jika dilaksanakan dengan baik, hal ini memungkinkan anda untuk mengambil keuntungan penuh dari scalable infrastruktur Web.

Komentar (0)

Di sini saya garis dasar untuk BERISTIRAHAT. Saya mencoba untuk menunjukkan pemikiran di balik masing-masing komponen dalam Tenang arsitektur agar memahami konsep yang lebih intuitif. Mudah-mudahan ini membantu mengungkap BERISTIRAHAT untuk beberapa orang!

ISTIRAHAT (rest) adalah desain arsitektur yang menguraikan bagaimana jaringan sumber daya (yaitu node yang berbagi informasi) yang dirancang dan dibahas. Secara umum, Tenang arsitektur membuatnya sehingga klien (meminta mesin) dan server (yang menanggapi mesin) dapat meminta untuk membaca, menulis, dan update data tanpa klien harus tahu bagaimana server beroperasi dan server dapat menyebarkannya kembali tanpa perlu tahu apa-apa tentang klien. Oke, keren...tapi bagaimana kita melakukan hal ini dalam praktek?

  • Yang paling jelas persyaratan adalah bahwa ada kebutuhan untuk sebuah bahasa universal dari beberapa macam sehingga server dapat memberitahu klien apa itu mencoba untuk melakukan dengan request dan server merespon.

  • Tetapi untuk menemukan apapun yang diberikan sumber daya dan kemudian memberitahu klien di mana sumber daya yang hidup, perlu ada cara universal yang menunjuk pada sumber daya. Ini adalah di mana Universal Resource Identifier (Uri) datang, mereka pada dasarnya adalah alamat unik untuk menemukan sumber daya.

Tapi arsitektur tidak berakhir di sana! Sementara di atas memenuhi kebutuhan dasar dari apa yang kita inginkan, kita juga ingin memiliki arsitektur yang mendukung volume tinggi lalu lintas sejak server tertentu biasanya menangani tanggapan dari sejumlah klien. Dengan demikian, kita tidak ingin membanjiri server dengan memiliki itu mengingat informasi tentang permintaan sebelumnya.

  • Oleh karena itu, kami memberlakukan pembatasan bahwa setiap permintaan-respon pasangan antara klien dan server adalah independen, yang berarti bahwa server tidak harus ingat apa-apa tentang permintaan sebelumnya (sebelumnya amerika serikat dan interaksi client-server) untuk menanggapi permintaan baru. Ini berarti bahwa kita ingin interaksi kita untuk menjadi tanpa kewarganegaraan.

  • Untuk lebih meringankan ketegangan pada server kami dari mengulangi perhitungan yang telah baru-baru ini dilakukan untuk klien yang diberikan, SISANYA juga memungkinkan caching. Pada dasarnya, caching berarti untuk mengambil snapshot dari respon awal yang diberikan kepada klien. Jika klien membuat permintaan yang sama lagi, server dapat menyediakan klien dengan snapshot daripada mengulang semua perhitungan yang diperlukan untuk membuat respon awal. Namun, karena ini adalah sebuah foto, jika foto sudah tidak berlaku--server menetapkan waktu berakhirnya di muka-dan respon telah diperbarui sejak awal cache (yaitu permintaan akan memberi jawaban yang berbeda dari respon cache), klien tidak akan melihat update sampai cache berakhir (atau cache dibersihkan) dan respon yang diberikan dari awal lagi.

  • Hal terakhir yang anda akan sering ke sini sekitar Tenang arsitektur adalah bahwa mereka yang berlapis-lapis. Kami telah benar-benar sudah secara implisit membahas persyaratan ini dalam diskusi kita tentang interaksi antara klien dan server. Pada dasarnya, ini berarti bahwa setiap lapisan dalam sistem kami berinteraksi hanya dengan lapisan yang berdekatan. Jadi dalam diskusi kami, klien lapisan berinteraksi dengan server kami layer (dan sebaliknya), tapi mungkin ada server lain lapisan yang membantu primer server memproses permintaan bahwa klien tidak secara langsung berkomunikasi dengan. Sebaliknya, server melewati pada permintaan seperti yang diperlukan.

Sekarang, jika semua ini terdengar akrab, kemudian besar. Hypertext Transfer Protocol (HTTP), yang mendefinisikan protokol komunikasi melalui World Wide Web merupakan implementasi dari gagasan abstrak Tenang arsitektur (atau sebuah instance dari SISA kelas jika anda're OOP fanatik seperti saya). Dalam implementasi ini berjalan-jalan, klien dan server yang berinteraksi melalui GET, POST, PUT, DELETE, dll., yang merupakan bagian dari bahasa universal dan sumber daya dapat diarahkan untuk menggunakan Url.

Komentar (0)

Jika saya harus mengurangi asli disertasi pada SISA hanya 3 kalimat-kalimat pendek, saya pikir berikut menangkap esensinya:

  1. Sumber daya yang diminta melalui Url.
  2. Protokol adalah terbatas pada apa yang dapat anda berkomunikasi dengan menggunakan Url.
  3. Metadata adalah lulus sebagai pasangan nama-nilai (post data dan query string parameter).

Setelah itu,'s mudah untuk jatuh ke dalam perdebatan tentang adaptasi, coding konvensi, dan praktik terbaik.

Menariknya, tidak ada menyebutkan HTTP POST, GET, MENGHAPUS, atau MENEMPATKAN operasi dalam disertasi. Yang harus menjadi seseorang yang's kemudian interpretasi "praktek terbaik" untuk "antarmuka seragam".

Ketika datang ke layanan web, tampaknya kita perlu beberapa cara untuk membedakan WSDL dan SOAP berbasis arsitektur yang menambahkan overhead yang cukup besar dan bisa dibilang banyak kompleksitas yang tidak perlu untuk antarmuka. Mereka juga memerlukan kerangka kerja tambahan dan alat-alat pengembang untuk menerapkan. I'm tidak yakin jika SISANYA adalah istilah yang terbaik untuk membedakan antara umum-pengertian antarmuka dan terlalu direkayasa interface seperti WSDL dan SOAP. Tapi kita perlu sesuatu.

Komentar (0)

SISANYA adalah pola arsitektur dan gaya penulisan didistribusikan aplikasi. Itu bukan gaya pemrograman dalam arti sempit.

Mengatakan anda menggunakan gaya ini mirip dengan mengatakan bahwa anda membangun rumah dengan gaya tertentu: misalnya Tudor atau Victorian. Kedua SISANYA sebagai perangkat lunak dan gaya Tudor atau Victorian sebagai sebuah rumah gaya dapat ditentukan oleh kualitas dan kendala-kendala yang membuat mereka. Misalnya SISA harus memiliki Client Server pemisahan di mana pesan self-describing. Tudor gaya rumah memiliki Tumpang tindih gables dan Atap yang tajam bernada dengan menghadap ke gables. Anda dapat membaca Roy's disertasi untuk mempelajari lebih lanjut tentang kendala-kendala dan kualitas yang membentuk SISANYA.

SISANYA tidak seperti rumah gaya telah memiliki waktu yang sulit menjadi konsisten dan praktis diterapkan. Ini mungkin telah disengaja. Meninggalkan implementasi aktual hingga desainer. Jadi anda bebas untuk melakukan apa yang anda inginkan, selama anda memenuhi batasan yang ditetapkan dalam disertasi anda membuat SELURUH Sistem.

Bonus:

Seluruh web didasarkan pada SISANYA (atau SISANYA adalah berbasis web). Oleh karena itu sebagai seorang pengembang web, anda mungkin ingin menyadari bahwa meskipun itu's tidak perlu untuk menulis yang baik web apps.

Komentar (0)

Saya pikir titik tenang adalah pemisahan statefulness ke lapisan yang lebih tinggi sementara membuat penggunaan internet (protokol) sebagai stateless lapisan transport. Kebanyakan pendekatan-pendekatan lain mencampur hal-hal.

It's terbaik pendekatan praktis untuk menangani perubahan-perubahan yang mendasar dari pemrograman di era internet. Mengenai perubahan-perubahan yang mendasar, Erik Meijer memiliki sebuah diskusi di acara berikut ini: http://www.infoq.com/interviews/erik-meijer-programming-language-design-effects-purity#view_93197 . Ia merangkum itu sebagai lima efek, dan menyajikan solusi dengan merancang solusi dalam bahasa pemrograman. Solusinya, bisa juga dicapai dalam platform atau sistem tingkat, terlepas dari bahasa. Tenang bisa dilihat sebagai salah satu solusi yang telah sangat berhasil dalam praktek saat ini.

Dengan gaya tenang, anda mendapatkan dan memanipulasi keadaan aplikasi di internet tidak dapat diandalkan. Jika gagal operasi saat ini untuk mendapatkan yang benar dan negara saat ini, yang dibutuhkan nol-validasi kepala sekolah untuk membantu aplikasi untuk melanjutkan. Jika gagal untuk memanipulasi keadaan, biasanya menggunakan beberapa tahap konfirmasi untuk menjaga hal-hal yang benar. Dalam pengertian ini, sisanya tidak sendiri seluruh solusi, kebutuhan fungsi-fungsi di bagian lain dari aplikasi web stack untuk mendukung kerja.

Mengingat sudut pandang ini, seluruh gaya tidak benar-benar terikat ke internet atau aplikasi web. It's solusi mendasar dari pemrograman situasi. Hal ini tidak sederhana, baik, itu hanya membuat antarmuka benar-benar sederhana, dan berupaya dengan teknologi lain yang luar biasa baik.

Hanya saya 2c.

Edit: Dua aspek penting:

Komentar (2)

Ini adalah luar biasa panjang "diskusi" namun cukup membingungkan untuk sedikitnya.

IMO:

  1. tidak Ada hal seperti itu sebagai nyenyak programing, tanpa bersama besar dan banyak bir :)

  2. rest (ISTIRAHAT) adalah sebuah gaya arsitektur yang ditentukan dalam disertasi Roy Fielding. Ia memiliki sejumlah kendala. Jika anda Layanan/Klien menghormati mereka maka lebih Nyenyak. Ini adalah itu.

Anda dapat meringkas(signifikan) kendala-kendala untuk :

  • komunikasi bernegara
  • menghormati HTTP spesifikasi (jika digunakan HTTP)
  • mengomunikasikan format konten yang ditransmisikan
  • menggunakan hypermedia sebagai mesin negara aplikasi

Ada lagi sangat baik pos yang menjelaskan hal-hal yang baik.

Banyak jawaban copy/paste informasi yang valid pencampuran itu dan menambahkan beberapa kebingungan. Orang-orang berbicara di sini tentang tingkat, tentang Nyenyak Uri(tidak ada hal seperti itu!), menerapkan metode HTTP GET,POST,PUT ... SISANYA adalah bukan tentang itu atau tidak hanya tentang itu.

Misalnya link - itu bagus untuk memiliki indah mencari API tapi pada akhirnya klien/server tidak benar-benar peduli link anda dapatkan/kirim itu adalah isi yang penting.

Di akhir Tenang klien harus dapat mengkonsumsi untuk setiap layanan Tenang asalkan format konten yang diketahui.

Komentar (0)

Pertanyaan lama, agak baru cara menjawab. Ada's banyak kesalahpahaman di luar sana tentang konsep ini. Saya selalu mencoba untuk mengingat:

  1. Terstruktur Url dan Metode Http/kata Kerja yang tidak pengertian tenang pemrograman.
  2. JSON adalah tidak tenang pemrograman
  3. Tenang pemrograman adalah tidak untuk Api

Saya mendefinisikan tenang pemrograman seperti

aplikasi lebih tenang jika ia menyediakan sumber daya (menjadi kombinasi dari data + negara transisi kontrol) dalam media jenis klien memahami

Untuk menjadi tenang programmer anda harus mencoba untuk membangun aplikasi yang memungkinkan aktor untuk melakukan hal-hal. Tidak hanya mengekspos database.

Negara transisi kontrol hanya masuk akal jika client dan server menyepakati jenis media representasi dari sumber daya. Jika tidak ada's tidak ada cara untuk mengetahui apa yang's kontrol dan apa yang isn't dan bagaimana untuk mengeksekusi kontrol. YAITU jika browser tidak't tahu <form> tag html kemudian ada'd menjadi apa-apa bagi anda untuk mengirimkan ke keadaan transisi di browser anda.

I'm tidak mencari untuk mempromosikan diri, tapi saya memperluas ide-ide ini untuk kedalaman yang besar dalam pembicaraan saya http://techblog.bodybuilding.com/2016/01/video-what-is-restful-200.html .

Kutipan dari pembicaraan saya adalah tentang sering disebut richardson model kematangan, i don't percaya pada tingkat, anda juga akan Tenang (tingkat 3) atau anda tidak, tapi apa yang saya suka menyebutnya tahu tentang hal itu adalah apa yang masing-masing tingkat tidak untuk anda di jalan anda untuk Tenang

Komentar (0)