Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Bekerja dengan RESTful dalam CodeIgniter

by
Difficulty:IntermediateLength:LongLanguages:

Malay (Melayu) translation by Kaustina Nurul Ilmi (you can also view the original English article)

CodeIgniter menjadi terkenal kerana kekuatannya sebagai kerangka aplikasi web berbasis PHP, tetapi tidak jarang kita melihat contoh penggunaannya untuk hal lain Hari ini kita akan belajar bagaimana kita boleh menggunakan CodeIgniter untuk membuat API RESTful untuk aplikasi web anda yang sudah ada, dan menunjukkan bagaimana interaksi dengan API anda sendiri atau lain-lain REST web perkhidmatan, seperti Facebook dan Twitter.

Tutorial terperinci

Pengenalan

Jika anda telah mengikuti seri CodeIgniter Dari Awal , anda akan tahu sekarang ini adalah relatif cepat dan mudah untuk mengumpulkan aplikasi web sederhana, seperti blog, CMS sistem, brosur situs, dll. Satu hal yang mungkin tidak anda pikirkan adalah menggunakan CodeIgniter untuk membuat API interaktif. Setelah cuba beberapa pelaksanaan REST yang ada, saya mendapati bahawa mereka tidak hanya kekurangan kesederhanaan tetapi kehilangan sebagian besar fitur yang Anda harapkan dari implementasi RESTful; jadi saya membangunnya sendiri. Tutorial ini akan menunjukkan cara menggunakan kod ini untuk menyediakan REST API anda, dan memberikan contoh bagaimana cara interaksi dengannya dari aplikasi web anda.

Asumsi

  1. Anda mempunyai web pelayan yang sudah siap, lokal atau online dan mengetahui cara mengelola file di dalamnya.
  2. Anda telah membaca beberapa tutorial CodeIgniter dari awal .
  3. Anda tahu cara mengatur CodeIgniter.
  4. Anda tahu sedikit mengenai RESTful.

Tutorial ini dibahagikan kepada dua bahagian Kita akan bermula dengan mempelajari bagaimana membuat perkhidmatan RESTful, kemudian meneruskan, kita akan belajar bagaimana interaksi dengannya dalam beberapa cara yang berbeza.

Bahagian 1 - Membuat API RESTful

Langkah 1: Menyiapkan Demo

Pertama, anda perlu memuat turun kod codeigniter -restserver dari GitHub dan menguninstall dan memindahkan kod ke server anda.

Ketika anda membuka folder tersebut, Anda akan melihat seluruh instalasi CodeIgniter, yang berada di sana untuk menjalankan demonya. Ini membolehkan orang bermain dengan demo REST sebelum mengintegrasikannya dengan aplikasi yang ada.

Buka "application / config / config.php" dan tetapkan base_url agar link berfungsi Base_url ini akan berbeza dengan semua orang dan bergantung sepenuhnya di mana anda mengupload fail anda.

Langkah 2: URL

Dengan fail yang diekstrak dan base_url sudah ditetapkan, kami siap untuk memuat instalasi RESTful CodeIgniter, dan melihat demo yang disertakan dengannya. Jelajahi dasar URL, yang secara lalai adalah:

http: // localhost / restserver

Di sini anda akan dapati beberapa pautan contoh ke contoh_api pengawal, yang boleh didapati di "aplikasi / pengawal / contoh_api.php" . Mari kita membedah URL dari contoh-contoh ini untuk melihat apa yang sedang berlaku. URL pertama adalah URL yang sangat sederhana.

URL ini kelihatan sangat mirip dengan URL CodeIgniter lain dengan controller dan method, tetapi Anda akan melihat di diagram ini bahwa metodenya diberi nama "Resource". REST adalah semua tentang Sumber Daya dan mereka sebenarnya adalah kata benda dalam aplikasi anda, yang berinteraksi dengan (yaitu ditambahkan, dihapus, diedit, di-query) berdasarkan HTTP header dan URL pertanyaan string atau HTTP argumen.

Format lalai untuk output adalah XML yang merupakan apa yang kita lihat dalam contoh asas ini. Pautan lain sedikit lebih besar dan menunjukkan bagaimana cara melewatkan parameter dan bagaimana menunjukkan output format dapat dimodifikasi di URL:

Biasanya di CodeIgniter, anda hanya melewatkan parameter nilai, namun pengawal REST menerima sejumlah parameter dalam urutan apa pun. Agar dapat bekerja, kita harus melewatkan nama dari parameter yang diikuti dengan nilai berpasangan.

Di akhir URL ialah parameter "format". Ini adalah parameter yang telah dipesan yang akan memodifikasi output format dari data yang diminta seperti:

engan memberikan data format pilihan yang akan digunakan kepada API pemaju dan klien aplikasi, API dibuka untuk audiens yang jauh lebih luas dan boleh digunakan dengan lebih banyak bahasa dan sistem pemrograman. Ketiganya bukanlah satu-satunya format yang disokong, di luar kotaknya API REST Anda dapat digunakan:

  • xml - hampir semua bahasa pemrograman dapat membaca XML
  • json - berguna untuk JavaScript dan semakin banyak aplikasi PHP.
  • csv - dibuka dengan spreadsheet program
  • html - jadual HTML sederhana
  • php - Representasi kod PHP yang boleh di-eval ()
  • siri - Struktural data yang boleh dipilah dalam PHP

Walaupun menambah format ke URL dengan teknis bukanlah cara yang paling RESTful untuk mengubah format, namun memudahkan pengujian browser yang mudah dan memungkinkan pengembang melakukan permintaan GET sederhana pada API tanpa cURL. Cara paling RESTful adalah menghantar header HTTP Content-type ke controller REST menggunakan KURL, namun akan dijelaskan nanti.

Langkah 3: Kod

Sekarang jika anda membuka aplikasi / controllers / example_api.php Anda akan segera menemukan beberapa perbezaan dari controller CodeIgniter normal.

REST_Controller

Dalam pola MVC, satu pengawal adalah titik pusat logika. ni dipanggil ketika pengguna membuat permintaan dan kemudian berdasarkan logika di controller itu mengambil data dan output dilihat. CodeIgniter berisi logikanya sendiri agar bagaimana Pengawal berfungsi, tetapi karena kita melakukan sesuatu yang berbeda, kita memerlukan pustaka REST_Controller kita sendiri untuk mengandung logika terkait REST sendiri. Jadi, bukannya hanya menggunakan:

... Anda akan perlu menggunakan:

Bekerja dengan Sumber Daya

Sekarang controller kosong anda sudah diatur, selanjutnya adalah metode atau "sumber daya". ni mungkin adalah bahagian tutorial yang paling membingungkan jika anda terbiasa dengan cara CodeIgniter bekerja. Secara dasarnya, anda mengambil Resource dan HTTP kata kerja dan menggabungkannya untuk membuat nama metode. adi dua contoh yang kita lihat sebelumnya mempunyai Sumber Daya pengguna pengguna dan pengguna . Karena keduanya dimuat di browser, kita tahu itu menggunakan request GET dan dua metode dibawah ini digunakan:

Ini mungkin kelihatan sedikit aneh, namun memberikan anda kemampuan untuk menggunakan URL yang sama dan menanggapi permintaan itu tergantung pada HTTP kata kerja yang telah digunakan. ika seseorang cuba mengakses API anda dengan cara yang tidak dibenarkan (dalam contoh ini PUT atau DELETE), itu akan menjawabnya dengan 404 saja. Jika anda tidak yakin tentang HTTP kata kerja, mari saya jelaskan.

GET

Digunakan untuk mengambil maklumat mengenai sumber yang ada. ni digunakan oleh penyemak imbas semasa anda memasukkan URL dan menekan pergi, atau saat Anda mengklik link, jadi sangat cocok untuk mengambil informasi tentang salah satu sumber Anda REST (seperti pengguna).

POST

Digunakan untuk memperbaharui sumber yang ada dengan maklumat. Pelayar menggunakan ini untuk mengirimkan sebahagian besar jenis borang di internet, walaupun beberapa menggunakan GET juga dengan mengirimkan formulir dengan query string yang berisi data dari lapangan.

LETAK

Yang kurang umum digunakan dan tidak didukung oleh sebahagian besar pelayar, PUT biasanya digunakan untuk membuat sumber daya baru.

DELETE

Juga tidak digunakan oleh banyak pelayar, kata kerja HTTP ini agak jelas digunakan untuk menghapus sumber daya.

Jika kita memasukkannya ke dalam kod dan mengizinkan setiap kata kerja pada pengguna sumber daya akan terlihat seperti ini:

Mengakses parameter dan pulihkan data

adi sekarang API telah diberi strukturnya dengan menetapkan sumber daya dan menentukan metode untuk setiap HTTP kata kerja yang ingin kami dukung; kita memerlukan parameter sehingga kita dapat menggunakan model dan pustaka CodeIgniter kita. Inilah salah satu manfaat utama penggunaan CodeIgniter untuk API kami, kerana kami dapat menggunakan model dan pustaka kami yang ada dan tidak perlu mengkode ulang mereka.

Contoh ini mengandungi lima potongan baru:

$ this-> get ()

Digunakan untuk mengembalikan variable GET baik dari query string seperti index.php / example_api / user? Id = 1 ini atau bisa diatur dengan cara lebih CodeIgniter dengan index.php / example_api / user / id / 1.

$ this-> post ()

Adalah alias untuk $ this-> input-> post () yang merupakan kaedah CodeIgniter untuk mengakses variable $ _POST dengan perlindungan XSS.

$ this-> put ()

Dibaca dalam argumen PUT yang ditetapkan dalam tajuk HTTP atau melalui kURL.

$ this-> delete ()

Anda bisa menebaknya, ini membaca dalam argumen DELETE, juga ditentukan di header HTTP atau melalui cURL.

$ this-> response ()

Mengirim data ke penyemak imbas dalam mana-mana jenis data yang diminta, atau lalainya adalah XML. Anda boleh melangkau HTTP status kod agar menunjukkan apakah berjaya atau gagal. Contohnya jika ID yang diberikan tidak ada dalam pangkalan data, anda boleh menggunakan $ this-> response (array ('error' => 'Pengguna tidak ditemukan'), 404);

Langkah 4: Bekerja dengan Model anda

Sampai sekarang, kami sudah bekerja dengan contoh API di instalasi bersih. Jadi langkah selanjutnya adalah menjalankan REST API yang berjalan dari dasar kode yang ada.

Walaupun muat turun dilengkapi dengan pemasangan CodeIgniter lengkap untuk demo dan untuk membolehkan API dibangun dari nol, hanya dua penting file adalah:

  1. aplikasi / config / rest.php
  2. aplikasi / perpustakaan / REST_Controller.php

Letakkan kedua fail tersebut ke dalam aplikasi CodeIgniter anda dan buatlahlah pengawal API baru.

Ini menunjukkan contoh API dengan beberapa nama generik model. Pada kaedah pertama, kita mengambil sebuah? Id = XX dan menyampaikannya ke model. Jika data ditemui, kita hantarnya ke fungsi $ this-> response () dengan status 200. ika tidak ada yang ditemukan, mengembalikan bukan badan dan 404 mengatakan tidak ada yang ditemukan. Anda boleh membayangkan bagaimana hal ini dapat diperluas untuk menjalankan semua API aktiviti jenis untuk aplikasi web anda.

Langkah 5: Mengamankan API

Sekarang API anda dibina yang memerlukan keselamatan sehingga hanya pengguna yang diberikan akses yang dapat berinteraksi dengan API. Untuk mengatur jenis login, nama pengguna dan kata laluan, bukalah "application / config / rest.php" di dalam dasar kode anda.

Tiada

Siapa pun boleh berinteraksi dengan salah satu daripada API controller anda.

Asas

Log masuk kaedah yang relatif tidak selamat yang seharusnya hanya digunakan pada jaringan internal / aman.

Digest

Log masuk kaedah yang jauh lebih selamat yang menyalin nama pengguna dan kata laluan. Sekiranya anda ingin memiliki API terlindung yang boleh digunakan oleh siapa saja, gunakan pencerna.

Menyiapkan pengguna sangat sederhana. Setiap log masuk adalah array item, dengan kunci dan nilai. Kuncinya adalah nama pengguna dan nilainya adalah kata laluan. . Tambah sebanyak yang anda suka ke dalam array ini dan sajikan mereka untuk siapa saja yang akan menggunakan API.

Bahagian 2 - Berinteraksi dengan Perkhidmatan RESTful

Entah itu API yang baru saja anda bangun atau public service seperti Twitter, Anda pasti ingin dapat berinteraksi dengannya. Melihat perkhidmatan RESTful berfungsi dengan asas HTTP permintaan, sangat mudah melakukannya dengan beberapa cara yang berbeza.

Cara yang berbeza untuk berinteraksi dengan REST

Setiap kaedah interaksi yang berbeza akan ditunjukkan dengan kod yang ditempatkan secara langsung dalam Controller method. Ini murni sehingga demo lebih mudah dibaca dan biasanya akan ditempatkan di dalam model atau pustaka untuk pemisahan MVC yang benar.

file_get_contents ()

Dengan menggunakan fungsi file_get_contents () PHP yang sederhana, anda dapat melakukan dasar GET permintaan. Ini adalah kaedah yang paling mendasar dari semua kaedah tetapi perlu disebutkan untuk momen "cepat dan kotor".

Perlu diketahui bahawa, sementara kaedah ini tidak akan berfungsi dengan menggunakan HTTP Digest authentication, jika anda menggunakan Basic HTTP authentication, Anda dapat menggunakan berikut sintaks untuk mendapatkan data dari kata sandi yang dilindungi API RESTful Anda:

Terdapat beberapa masalah dengan menggunakan kaedah ini: satu-satunya cara menetapkan tambahan HTTP header adalah dengan mengaturnya secara manual menggunakan fungsi PHP stream_context_create () , yang dapat sangat rumit bagi pengembang yang baru mengenal cara kerja permintaan HTTP internal. Kelemahan lain adalah anda hanya menerima badan dari HTTP respons dalam format aslinya, yang bermakna anda perlu menangani konversi dari permintaan tunggal.

KURL

URL adalah cara paling fleksibel untuk berinteraksi dengan REST API kerana direka untuk perkara yang sama seperti ini. Anda boleh mengatur HTTP header, parameter HTTP dan banyak lagi. Berikut adalah contoh bagaimana cara memperbaharui pengguna dengan contoh_api dan cURL kami untuk membuat permintaan POST:

Berinteraksi dengan API anda dengan cara ini boleh-boleh saja, tetapi ada dua masalah dengan cara ini:

  1. Menggunakan sintaks yang jelek membingungkan - bayangkan membuat beberapa aplikasi berdasarkan itu.
  2. cURL tidak dipasang pada semua pelayan secara lalai.

Untuk mengatasi sintaks jelek ini, sebuah pustaka cURL telah dikembangkan untuk CodeIgniter yang menyederhanakan banyak perkara.

Permintaan yang sama persis yang dibuat dengan pustaka cURL akan kelihatan seperti ini:

Jauh lebih baik untuk melihatnya kan? Nah, ada kaedah yang lebih mudah lagi untuk bekerja dengan REST di aplikasi CodeIgniter Anda yang ini.

Pustaka klien REST

Sebuah REST client library telah dikembangkan yang berada di atas pustaka cURL ini yang menangani format konversi, HTTP login dan beberapa aspek lain dari API REST anda.

Di sini anda dapat melihat kami membuat permintaan GET, menghantar id sebagai parameter dan memberi tahu pustaka bahawa kami ingin 'json' sebagai formatnya. Ini menangani pengaturan Content-type untuk Anda, dan mengubah data menjadi objek PHP untuk Anda. Anda boleh menukar nilai ini menjadi 'xml', 'json', 'serialize', 'php', 'csv' atau jenis custom MIME yang anda suka, misalnya:

Seperti yang mungkin anda duga dan juga $ this-> rest-> get (), pustaka juga menyokong $ this-> rest-> post (), $ this-> rest-> put (), $ this-> rest-> padam () untuk mencocokkan semua kaedah REST_Controller Anda.

Anda perlu hasil var_dump () yang berasal dari REST client library untuk memastikan anda memperoleh kembali data yang betul. . Konversi kadang-kadang akan menjadi array dan kadang-kadang menjadi objek, bergantung bagaimana konversi oleh PHP. Jika jenis MIME yang dikembalikan tidak disokong maka akan memulihkan format sebagai teks biasa.

Bercakap dengan Twitter

Dengan menggunakan Pustaka REST ini anda boleh bercakap dengan RESTful lainnya seperti Twitter dan Facebook. Berikut ialah contoh ringkas cara anda boleh mendapatkan maklumat tertentu untuk pengguna berdasarkan ID mereka, dengan menggunakan Twitter XML default format.

Melihat ini, anda akan melihat bahawa berinteraksi dengan Twitter API sedikit berbeza dalam beberapa cara.

  1. Mereka menyokong URL berasaskan format yang berganti dalam bentuk .json bukannya / format / json. Beberapa memerlukan sambungan, beberapa tidak; jadi yang terbaik adalah selalu menambahnya.
  2. Mereka kebanyakan hanya menyokong GET / POST, tetapi mulai menambah lagi kaedah DELETE.
  3. Mereka tidak selalu mempunyai sumber daya di URL mereka, contohnya: pengguna / pencarian adalah satu metode REST, tetapi daftar adalah yang lain.

Awasi perbezaan ini kerana mereka boleh menjebak anda. Jika anda terjebak, cukup echo $ this-> rest-> debug () untuk keseluruhan rentang informasi tentang permintaan REST anda.

Ringkasan

Menggabungkan apa yang anda tahu tentang RESTful, pelayan REST CodeIgniter dan dokumentasi API Twitter - atau dokumentasi lain API RESTful dalam hal ini - Anda boleh membuat beberapa aplikasi yang terintegrasi dengan kustom atau awam web menggunakan REST. Anda boleh memperbaharui API anda dengan membuat lebih banyak REST_Controller dan bahkan membuat API modular dengan menggunakan Matchbox atau Pemisahan Modular untuk membuat controller.php api.php untuk setiap modul agar membantu API anda tetap tertata rapi sebagai aplikasi anda.

Menulis Tutorial Plus

Adakah anda tahu bahawa anda boleh mendapatkan hingga $ 600 untuk menulis tutorial PLUS dan / atau screencast untuk kami? Kami sedang mencari tutorial mendalam dan yang ditulis dengan baik mengenai HTML, CSS, PHP, dan JavaScript. Sekiranya anda mempunyai kemampuan tersebut, sila hubungi Jeffrey di nettuts@tutsplus.com.

Harap dicatat bahawa kompensasi yang sebenarnya akan bergantung pada akhir kualiti dari tutorial dan screencast.

Write a PLUS tutorial
Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.