Tampilkan postingan dengan label REST. Tampilkan semua postingan
Tampilkan postingan dengan label REST. Tampilkan semua postingan

April 22, 2013

Go + REST Client Untuk Mengakses URL Dengan Respon JSON Dinamis

REST merupakan pola arsitektur aplikasi yang memanfaatkan HTTP untuk mengeksploitasi layanan / services serta method dari HTTP (GET, POST, DELETE, dll) untuk berkomunikasi antara klien dengan server. REST merupakan hasil disertasi dari Roy T. Fielding, bisa dibaca lengkap di http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm. Enaknya menggunakan REST adalah kemudahan interoperabilitas data maupun layanan serta. Hal ini juga berlaku ke banyak basis data NOSQL yang biasanya menyertakan REST API sehingga implementasi driver bisa dengan mudah dibuat tanpa akses low level networking seperti halnya masa-masa pra REST. 

Go juga menyediakan akses yang cukup lengkap untuk keperluan HTTP client ini, meskipun masih tetap diperlukan thin layer untuk wrapper guna mempermudah akses ini. Jika memang tidak akan membuat wrapper, bisa menggunakan berbagai pustaka REST yang tersedia. Pada tulisan ini, saya akan menggunakan pustaka restclient (https://github.com/jmcvetta/restclient) yang dibuat oleh Jason McVetta (https://github.com/jmcvetta). 

Basis data NOSQL biasanya mempunyai fitur horizontal scalability yang memungkinkan setiap dokumen (dalam SQL bisa disamakan dengan record / row) bisa mempunyai komponen yang berbeda-beda dan scalable. Salah satu contoh yang akan saya bahas disini adalah ArangoDB (http://www.arangodb.org). ArangoDB menyediakan REST API yang dijelaskan dengan lengkap disini: http://www.arangodb.org/manuals/current/ImplementorManual.html. Untuk tulisan ini, saya akan memberikan contoh http://server:port/_api/document untuk mengambil data dokumen. Sintaks lengkap dari API ini adalah:


GET /_api/document/document-handle


Jika hasilnya bisa diprediksi, dalam artian, kita mengetahui struktur data yang akan diambil, maka struktur itu bisa kita definisikan menggunakan struct, tetapi tentu saja ini hanya pada kondisi tertentu saja. Kebanyakan, jika kita akan mengakses dokumen, fitur skalabilitas horizontal menyebabkan tiap dokumen mempunyai isi yang berbeda-beda. Jadi bisa dikatakan bahwa strukturnya berupa JSON yang dinamis. Bagaimana mengelola ini menggunakan Go?

Jika menemui kasus seperti ini, maka kita bisa mendeskripsikan isi yang akan kita akses tersebut menggunakan map[string]string. Berikut adalah program yang saya gunakan untuk mengakses dokumen di ArangoDB:

akses-doc-arangodb.go

package main
import (
  "fmt"
  "github.com/jmcvetta/restclient"
)
func main() {
  var jml int
  var s map[string]string
  r := restclient.RequestResponse{
    Url:    "http://localhost:8529/_api/document/_users/1736896",
    Method: restclient.GET,
    Data:   "",
    Result: &s,
  }
  _, err := restclient.Do(&r)
  if err != nil {
    panic(err)
  }
  jml = len(s)
  fmt.Printf("Jumlah komponen = %d\n", jml)
  fmt.Print(s)
  fmt.Println("\nUser = ", s["user"])
}

Hasilnya adalah sebagai berikut:

Jumlah komponen = 6
map[_rev:1736896 _key:1736896 active: user:root _id:_users/1736896 password:$1$0cc26832$d582f08ab0898d7d1ab2a18e221d7dc1a2ea93ff80a093678a566fae35bbfc60]
User =  root

Jadi, sekarang waktunya ancang-ancang untuk membuat driver ArangoDB untuk Go menggunakan REST API yang disediiakan ArangoDB. Stay tune!



Februari 04, 2013

Pragmatic Web: Tinjauan Arsitektural, LAP, dan Rule-Based System


Pragmatic Web merupakan perkembangan selanjutnya dari visi Semantic Web, meskipun ada banyak tulisan serta riset yang menyatakan bahwa yang dimaksud oleh Tim Berners-Lee pada saat mencetuskan visi Semantic Web ini merupakan hal yang ingin diwujudkan oleh Pragmatic Web ini. Pragmatic Web sebenarnya masih merupakan suatu hal yang baru dan tidak hanya terbatas pada mewujudkan sumber daya di Web yang mempunyai nilai semantik, tetapi sudah sampai ke arah pemanfaatan sumber daya semantik di Web untuk menghasilkan komitmen sosial serta kolaborasi. Dari pengertiak tersebut, kita bisa memahami bahwa Pragmatic Web tidak akan mendapatkan hasil yang maksimal tanpa sumber daya semantic di Web. Secara sederhana, kita bisa mengatakan bahwa Pragmatic Web menambahkan informasi kontekstual yang memungkinkan adalah komunikasi antara aplikasi Pragmatic Web tersebut dengan aplikasi Pragmatic Web lain maupun intelligent agent di Web. Tidak hanya komunikasi, dengan adanya konteks tersebut, bisa dilakukan aksi / action sehingga bisa terjadi komitmen sosial maupun tidak terjadi komitmen sosial.

Secara arsitektural, Pragmatic Web masih menggunakan interaksi dasar client-server di Internet serta berbagai macam infrastruktrur hardware maupun software. Pragmatic Web memperoleh banyak insight dari penelitian tentang LAP (Language/Action Perspective) yang dipelopori oleh Terry Winograd. LAP menunjuk pada adanya keterkaitan antara bahasa dengan aksi yang diharapkan dari komunikasi bahasa tersebut. Winograd menyatakan bahwa LAP ini bisa menjadi suatu paradigma baru untuk merancang sistem informasi. Sebagai trigger dari action, bahasa yang terdiri atas 3 bagian, yaitu sintaks, semantik, serta pragmatik, menjadi tiga hal utama yang diperhatikan dalam merancang dan mengimplementasikan suatu sistem komputer. Bahasa mempunyai keterkaitan erat dengan aksi yang akan dilakukan oleh pihak yang diajak berkomunikasi. Searle mendefinisikan 5 hal fundamental dari kalimat bahasa yang diucapkan:
  • Assertive: ketegasan dalam menyatakan kebenaran suatu hal
  • Directive: menyatakan perintah yang harus dilaksanakan oleh pihak yang diajak berkomunikasi (baik 'keras' maupun halus).
  • Commissive: pihak yang mengkomunikasikan akan berkomitmen melaksanakan suatu hal yang akan dikerjakan di masa yang akan datang.
  • Declaration: mengumumkan suatu hal.
  • Expressive: ekspresi tentang suatu hal, misalnya sedih, gembira, memuji, dan lain-lain.
Insight dari LAP ini bisa diterapkan dalam dunia Web. Web pada dasarnya merupakan sistem tanda (dilihat dari sisi semiotika) yang berfungsi untuk mengkomunikasikan sesuatu. Klien (browser maupun headless software agent) adalah pihak-pihak yang berkomunikasi dengan aplikasi Web. Meski demikian, ada hal yang harus dipahami, bahwa Pragmatic Web terkait dengan komunikasi antar aplikasi, bukan antara manusia dengan komputer (HCI). Ini diperlukan karena terlalu banyak sumber daya di Internet dan manusia akan kerepotan dengan hal tersebut. Otomatisasi merupakan hal yang harus diperjuangkan di Internet. Pragmatic Web memungkinkan adanya interaksi serta komunikasi dan komitmen sosial secara otomatis antar aplikasi on behalf of human.

Jika demikian, bagaimana suatu aplikasi Web bisa membentuk Pragmatic Web? Pragmatic Web, secara sederhana merupakan aplikasi Web biasa dengan penambahan pada kandungan semantik dari data / informasi yang dieksploitasi untuk keperluan klien, serta mekanisme yang memungkinkan adanya komunikasi antar aplikasi dan komitmen sosial antar aplikasi tersebut. Mekanisme yang sampai saat ini dirasakan penting dan masih diteliti oleh banyak peneliti adalah integrasi dari Rule-based System ke dalam aplikasi Web. Hal ini memungkinkan agent memahami konteks dari informasi yang terdapat dalam suatu sumber daya dan kemudian bisa melakukan hal-hal tertentu berdasarkan definisi validitas pada Rule-based System tersebut. Integrasi ini memungkinkan implementasi dari insight LAP di atas ke dalam Web. Dengan menggunakan sumber daya semantik serta Rule-based System, suatu aplikasi Pragmatic Web bisa mendefinisikan 5 hal fundamental seperti yang ditulis oleh Searle di atas. 

Masih ada banyak hal yang harus dibenahi dan diimplementasikan dalam hal ini, diantaranya adalah:
  1. Interoperability antar Rule-based System. W3C sudah mendefinisikan RIF untuk keperluan interchange format dari sekian banyak format dan teknologi (RuleML, JSON-Rule, F-Logic, Datalog, SWRL, dan lain-lain). Interoperability ini merupakan hal yang kompleks dan barangkali bisa menjadi suatu disertasi sendiri.
  2. Desain arsitektural dari aplikasi Pragmatic Web. Kandidat untuk keperluan ini adalah memanfaatkan arsitektur yang dikembangkan oleh Roy T. Fielding: REST. Penggabungan REST dengan teori dari Searle di atas akan memungkinkan implementasi LAP di Web.
  3. Service Discovery. Jika aplikasi Pragmatic Web sudah dibuat, bagaimana agent bisa menemukan service yang ditawarkan oleh aplikasi tersebut?
  4. Bagaimana metodologi untuk mengembangkan aplikasi Pragmatic Web tersebut? 
Problem-problem di atas akan banyak terbantu dengan adanya referensi arsitektur dari aplikasi Pragmatic Web. Saat ini saya sedang mengembangkan arsitektur referensi berdasarkan model referensi berikut:


Model referensi awal ini akan dirinci ke dalam suatu referensi arsitektur. Referensi arsitektur sudah menyertakan komponen-komponen nyata dan akan saya tuliskan seiring dengan berkembangnya disertasi saya.