Pertanyaan Apakah layak untuk membuat klien REST dengan Flex?


Saya memulai proyek menggunakan arsitektur Restful yang diimplementasikan di Java (menggunakan standar JAX-RS baru)

Kami berencana untuk mengembangkan GUI dengan aplikasi Flex. Saya telah menemukan beberapa masalah dengan implementasi ini menggunakan komponen HTTPService (kode kesalahan respons, akses header ...).

Setiap orang memiliki pengalaman dalam proyek serupa. Apakah itu layak?


32
2017-09-30 14:56


asal


Jawaban:


Masalahnya di sini adalah bahwa banyak diskusi web seputar masalah ini adalah satu tahun atau lebih tua. Saya sedang mengerjakan penelitian yang sama ini sekarang, dan inilah yang saya pelajari hari ini.

Ini Artikel IBM Developer Works mulai Agustus 2008 oleh Jorge Rasillo dan Mike Burr menunjukkan cara melakukan aplikasi back-end Flex front-end / RESTful (contoh dalam PHP dan Groovy). Artikel yang bagus. Anyway, inilah yang dibawa pergi:

  • Kode PHP / Groovy mereka menggunakan dan mengharapkan PUT dan DELETE.
  • Tetapi kode Flex harus menggunakan POST, tetapi mengatur header HTTP X-Method-Override ke DELETE (Anda dapat melakukan hal yang sama untuk PUT yang saya duga).
  • Perhatikan bahwa ini tidak Metode Proxy yang dibahas di atas.

// Flex tidak tahu cara menghasilkan DELETE HTTP.
// Untungnya, sMash / Zero akan menafsirkan HTTP POST dengan
// sebuah X-Method-Override: DELETE header sebagai DELETE.
deleteTodoHS.headers ['X-Method-Override'] = 'DELETE';

Apa yang sedang terjadi disini? server web IBM memotong dan menafsirkan "POST dengan DELETE" sebagai DELETE.

Jadi, saya menggali lebih jauh dan menemukan ini posting dan diskusi dengan Don Box (salah satu orang SOAP asli). Rupanya ini adalah perilaku yang cukup standar karena beberapa browser, dll. Tidak mendukung PUT dan DELETE, dan merupakan pekerjaan yang sudah ada beberapa saat. Ini cuplikan, tapi masih banyak diskusi.

"Jika saya membangun klien GData, saya benar-benar bertanya-tanya mengapa saya akan repot-repot menggunakan metode DELETE dan PUT sama sekali mengingat bahwa X-HTTP-Method-Override akan bekerja dalam banyak kasus / penyebaran."

Yang saya ambil dari ini adalah bahwa jika sisi web Anda mendukung header X-Method-Override ini, maka Anda dapat menggunakan pendekatan ini. Komentar Don Box membuat saya berpikir ini didukung dengan cukup baik, tetapi saya belum mengonfirmasi itu.

Masalah lain muncul di sekitar dapat membaca header respons HTTP. Sekali lagi, dari sebuah posting blog pada tahun 2007 oleh Nathan de Vries, kita melihat ini dibicarakan. Dia menindaklanjuti posting blog itu dan diskusi dengan komentarnya sendiri:

"Satu-satunya perubahan di depan web adalah versi Flash Player yang lebih baru (tentu saja yang disertakan dengan Flex 3 beta) sekarang mendukung properti responsHeader pada instance HTTPStatusEvent."

Saya berharap itu berarti tidak ada masalah sekarang.


23
2017-10-02 16:10



Seperti yang telah ditunjukkan oleh banyak orang HTTPService agak sedikit simpel dan tidak melakukan semua yang ingin Anda lakukan. Namun, HTTPService hanyalah gula di atas flash.net.* kelas suka URLLoader, URLRequest dan URLRequestHeader. Dengan menggunakan ini Anda dapat mengumpulkan sebagian besar permintaan HTTP.

Ketika datang untuk mendukung metode lain selain GET dan POST masalah sebagian besar terletak pada bahwa beberapa browser (misalnya Safari) tidak mendukung ini, dan Flash Player bergantung pada browser untuk semua jaringan itu.


6
2017-10-01 13:16



Ada kelemahan yang pasti dari kemampuan Flex untuk bertindak sebagai klien RESTful murni.

Komentar di bawah berasal dari ini blog:

Masalahnya adalah kelas HTTPService   beberapa batasan utama:

  1. Hanya metode GET dan POST yang didukung di luar kotak (kecuali Anda   gunakan FDS dan setel atribut useProxy menjadi   benar)
  2. Tidak dapat mengatur tajuk permintaan dan tidak ada akses ke respons   header Karena itu saya tidak bisa   mengakses tubuh respons dalam kasus ini   kesalahan.
  3. Ini HTTPService mendapatkan kode status apa pun lainnya 200, itu pertimbangkan   sebuah kesalahan. (acara 201, aduh !!). Itu   FaultEvent tidak memberikan informasi   tentang kode status tanggapan apa pun   tubuh. Klien Flex tidak akan memiliki   tahu apa yang salah.

Matt Raible juga memberi a presentasi bagus di REST dengan Rails, Grails, GWT, dan Flex yang memiliki referensi bagus yang terkait dengannya.

Apakah itu layak atau tidak benar-benar tergantung pada seberapa banyak Anda mau bekerja dengan proxy, dll.


5
2017-09-30 15:16



Saya telah bekerja pada penggantian sumber terbuka untuk komponen HTTPService yang sepenuhnya mendukung REST. Jika tertarik, Anda dapat menemukan versi beta (kode sumber dan / atau gabungan pustaka runtime bersama Flex) dan petunjuk di sini:

http://code.google.com/p/resthttpservice/


3
2018-01-09 00:52



Jawaban singkatnya adalah ya, Anda dapat melakukan RESTful with Flex. Anda hanya perlu mengatasi keterbatasan pemutar Flash (lebih baik dengan versi terbaru) dan keterbatasan tumpukan HTTP browser yang ada.

Kami sudah melakukan pengembangan klien RESTful di Flex selama lebih dari setahun setelah menyelesaikan header permintaan HTTP dasar dan kurangnya PUT dan DELETE melalui pendekatan rails-esque? _Method =. Tacky mungkin, tapi itu berhasil.

Saya mencatat beberapa sakit kepala di pos blog lama di http://verveguy.blogspot.com/2008/07/truth-about-flex-httpservice.html


2
2018-01-14 02:29



Dukungan Flex untuk REST paling lemah. Saya menghabiskan banyak waktu untuk membuat prototipe sehingga saya tahu sebagian besar masalah. Seperti yang disebutkan sebelumnya, di luar kotak hanya ada dukungan untuk GET dan POST. Sepintas tampaknya Anda dapat menggunakan konfigurasi proxy di Layanan Data LiveCycle atau Blaze untuk mendapatkan dukungan untuk PUT dan DELETE. Namun, itu palsu. Permintaan yang datang dari aplikasi Flex Anda akan tetap menjadi POST. Proxy mengonversinya ke PUT atau DELETE di sisi server untuk mengelabui kode sisi server Anda. Ada masalah lain juga. Ini terdengar percaya bahwa ini adalah yang terbaik yang bisa dihasilkan Adobe. Setelah evaluasi saya, kami memutuskan untuk pergi ke arah lain.


2
2018-03-10 21:31



Ya, saya bisa menggunakan POST dan mengakses header dengan komponen ini:

http://code.google.com/p/as3httpclient/wiki/Links

Contoh


1
2017-09-30 15:35



Saya sedang bekerja sekarang di aplikasi yang sangat bergantung pada panggilan REST antara Flex dan JavaScript dan Java Servlets. Kami mengatasi masalah kode galat respons dengan membuat konvensi dari sebuah <nama = = "XXX" name = "YYYYYY"> blok yang dikembalikan saat kesalahan, dengan ID kesalahan yang secara kasar memetakan kode kesalahan HTTP.

Kami mendapatkan batasan skrip lintas situs dengan menggunakan Java Servlet sebagai proxy HTTP. Panggilan ke proxy (yang berjalan pada server yang sama yang melayani sisa konten, termasuk konten Flex, mengirim permintaan ke server lain, kemudian mengirim tanggapan kembali ke pemanggil asli.


1
2017-09-30 19:29



RestfulX telah memecahkan sebagian besar / semua masalah REST dengan Flex. Ini memiliki dukungan untuk Rails / GAE / Merb / CouchDB / AIR / WebKit, dan saya yakin itu akan menjadi sekejap untuk menghubungkannya dengan implementasi Java Anda.

Dima's mengintegrasikan Perpustakaan AS3HTTPClient ke dalamnya juga.

Coba lihat!


1
2017-10-05 07:43



Sebenarnya sudah menggunakan Flex dengan Rest-Style Framework. Seperti mbrevort sudah disebutkan PUT dan DELETE metode tidak dapat langsung digunakan. Sebaliknya kami melakukan PUT melalui POST dan untuk DELETE kami menggunakan GET pada sumber daya dengan parameter URL seperti? Action = delete.

Ini bukan gaya 100% Istirahat, jadi saya tidak yakin, jika ini berfungsi dengan implementasi JSR 311. Anda akan membutuhkan beberapa fleksibilitas di sisi server untuk menyiasati pembatasan PUT dan DELETE.

Sehubungan dengan penanganan kesalahan, kami telah menerapkan layanan kesalahan. Dalam kasus kesalahan sisi server, aplikasi Flex dapat meminta layanan kesalahan ini untuk mendapatkan pesan kesalahan yang sebenarnya. Ini juga jauh lebih fleksibel daripada hanya memetakan kode pengembalian HTTP ke pesan statis.

Namun berkat skrip ECMA Flex yang bekerja dengan layanan REST berbasis XML sangat mudah.


0
2017-09-30 15:31



REST lebih merupakan ideologi daripada apa pun. Anda pergi ke presentasi SISA dan mereka memiliki dispenser keren.

Untuk aplikasi Flex, menggulirkan tumpukan bersamaan dengan BlazeDS dan data AMF marshalling lebih nyaman dan lebih berkinerja.


0
2017-12-24 21:13