Monday, March 9, 2015

Cara Mengakses REST (REpresentational State Transfer) / Web Service dengan VB6

Dalam kesempatan ketika melakukan pemrograman, saya harus menambahkan sebuah sistem yang berbeda dari yang biasa saya lakukan, dalam hal ini program memerlukan sistem baru agar dapat mengakses data REST/Web services. Nah, pada kesempatan ini saya akan berbagi pengalaman bagai cara mengakses layanan REST/Web dengan VB6.

Apa itu REST (REpresentational State Transfer)?

REST (REpresentational State Transfer) / Web Service VB6
REST, singkatan bahasa Inggris dari representational state transfer atau transfer keadaan representasi, adalah suatu gaya arsitektur perangkat lunak untuk untuk pendistibusian sistem hipermedia seperti WWW. Istilah ini diperkenalkan pertama kali pada tahun 2000 pada disertasi doktoral Roy Fielding, salah seorang penulis utama spesifikasi HTTP. Istilah ini selanjutnya dipergunakan secara luas pada komunitas jaringan.

REST secara spesifik merujuk pada suatu koleksi prinsip-prinsip arsitektur jaringan yang menggariskan pendefinisian dan pengalamatan sumber daya. Istilah ini sering digunakan dengan longgar untuk mendeskripsikan semua antarmuka sederhana yang menyampaikan data dalam domain spesifik melalui HTTP tanpa tambahan lapisan pesan seperti SOAP atau pelacakan sesi menggunakan cookie HTTP. Dua pengertian ini dapat menimbulkan konflik dan juga tumpang tindih. Dimungkinkan untuk merancang suatu sistem perangkat lunak besar sesuai dengan gaya arsitektur REST Fielding tanpa menggunakan HTTP dan tanpa berinteraksi dengan WWW. Juga dimungkinkan untuk merancang antarmuka XML+HTTP sederhana yang tidak mengikuti prinsip-prinsip REST, tapi sebaliknya mengikuti model dari RPC (remote procedure call). Perbedaan penggunaan istilah REST ini cukup menyebabkan permasalahan dalam diskusi-diskusi teknis.

Sistem yang mengikuti prinsip REST Fielding sering disebut sebagai "RESTful".

Sumber: http://www.wikipedia.org/

Secara umum, setiap mengakses Web Service kita harus menyertakan beberapa variabel yang diperlukan untuk memberikan informasi atau validasi proses yang dikirim pada HTTP Header, misalnya:
Accept -- data format (XML atau JSON)
X-Cons-ID -- Consumer ID
X-Timestamp -- TimeStamp
X-Signature -- Pola yang digunakan ditentukan oleh REST/Web services atau variabel lain sesuai dengan aturan yang diberikan oleh Web Service ketika diakses.

Sebelum lebih lanjut untuk mengakses Web Service, pertama-pertama saya akan mencoba dengan menggunakan Tools (Add-ons). Add-on ini adalah software tambahan atau ekstensi Advanced Rest Client dari browser Chrome, yang dapat anda download di Chrome Web Store. Contoh percobaan yang saya menggunakan dapat anda lihat seperti gambar dibawah ini:
REST (REpresentational State Transfer) / Web Service VB6

VB6 referensi yang diperlukan

Referensi dalam VB6 yang diperlukan dalam mengakses REST/Web services ada dua yaitu Microsoft WinHTTP Services dan Microsoft XML. Oleh karena itu, pertama yang kita lakukan adalah mengambil Reference komponen tersebut seperti contoh dalam di bawah ini:
REST (REpresentational State Transfer) / Web Service VB6
Jangan lupa, anda juga harus memperhatikan dan mempersiapkan variabel yang dibutuhkan oleh REST/Web services selain Accept, X-Cons-ID, Timestamp dan X-Signature yaitu URI (Uniform Resource Identifiers). URI adalah alamat Web Service yang telah ditentukan.

GET, PUT, POST, DELETE dalam REST/Web Service

Proses utama yang dapat dilakukan pada akses REST/Web services ada 4 (empat) yaitu:
GET: mengambil data dari REST/Web services
PUT: menambahkan data ke REST/Web services
POST: merubah/edit data ke REST/Web services
DELETE: menghapus data di REST/Web services

Berikut contoh Program (Source Code) untuk mengakses REST/Web services

Buat 4 (empat) fungsi Get, Put, Post dan Delete ke dalam Class atau Module seperti berikut ini:
Public Function GetResponse(URI As String) As Boolean
    Dim oHTTRequest As New WinHttp.WinHttpRequest
    Dim oResult As String
    On Error GoTo ErrRequest
    oHTTRequest.Option(WinHttpRequestOption_EnableHttp1_1) = False
    oHTTRequest.Open "GET", URI, False
    oHTTRequest.SetRequestHeader "X-Cons-ID", "XXXXXX (your cons-id)"
    oHTTRequest.SetRequestHeader "X-Timestamp", "XXXXX (timestamp)"
    oHTTRequest.SetRequestHeader "X-Signature", "XXXXX (your signature)"
    oHTTRequest.Send
    If oHTTRequest.Status = 200 Then
        GetResponse = True
        oResult = oHTTRequest.ResponseText
    Else
        GetResponse = False
        oResult = oHTTRequest.ResponseText
    End If
    Set oHTTRequest = Nothing
    Exit Function
ErrRequest:
    Set oHTTRequest = Nothing
    GetResponse = False
    Err.Raise Err.Number, ", Err.Description"
End Function
Public Function PutResponse(URI As String) As Boolean
    Dim oHTTRequest As MSXML2.XMLHTTP30
    Dim oResult As String
 
    On Error GoTo ErrRequest
     
    Set oHTTRequest = New MSXML2.XMLHTTP30
    oHTTRequest.Open "PUT", URI, False
    oHTTRequest.SetRequestHeader "X-Cons-ID", "XXXXXX (your cons-id)"
    oHTTRequest.SetRequestHeader "X-Timestamp", "XXXXX (timestamp)"
    oHTTRequest.SetRequestHeader "X-Signature", "XXXXX (your signature)"
    oHTTRequest.SetRequestHeader "Content-Type", "text/xml"
    oHTTRequest.Send "XML Data Put?"
    oResult = oHTTRequest.ResponseText
    If oHTTRequest.Status = 201 Or oHTTRequest.Status = 200 Then
        PostResponse = True
    Else
        PostResponse = False
    End If
    Set oHTTRequest = Nothing
    Exit Function
ErrRequest:
    PostResponse = False
    Err.Raise Err.Number, ", Err.Description"
End Function
Public Function PostResponse(URI As String) As Boolean
    Dim oHTTRequest As MSXML2.XMLHTTP30
    Dim oResult As String
 
    On Error GoTo ErrRequest
     
    Set oHTTRequest = New MSXML2.XMLHTTP30
    oHTTRequest.Open "POST", URI, False
    oHTTRequest.SetRequestHeader "X-Cons-ID", "XXXXXX (your cons-id)"
    oHTTRequest.SetRequestHeader "X-Timestamp", "XXXXX (timestamp)"
    oHTTRequest.SetRequestHeader "X-Signature", "XXXXX (your signature)"
    oHTTRequest.SetRequestHeader "Content-Type", "text/xml"
    oHTTRequest.Send "XML Data Post?"
    oResult = oHTTRequest.ResponseText
    If oHTTRequest.Status = 201 Or oHTTRequest.Status = 200 Then
        PostResponse = True
    Else
        PostResponse = False
    End If
    Set oHTTRequest = Nothing
    Exit Function
ErrRequest:
    PostResponse = False
    Err.Raise Err.Number, ", Err.Description"
End Function
Public Function DeleteResponse(URI_Response As String) As Boolean
    Dim oHTTRequest As MSXML2.XMLHTTP30
    Dim oResult As String
    On Error GoTo ErrRequest
     
    Set oHTTRequest = New MSXML2.XMLHTTP30
    oHTTRequest.Open "DELETE", URI, False
    oHTTRequest.SetRequestHeader "X-Cons-ID", Fields.xConsID
    oHTTRequest.SetRequestHeader "X-Timestamp", Fields.xTimeStamp
    oHTTRequest.SetRequestHeader "X-Signature", Fields.xSignature
    oHTTRequest.SetRequestHeader "Content-Type", "text/xml"
    oHTTRequest.Send "XML Data Delete?"
    oResult = oHTTRequest.ResponseText
    If oHTTRequest.Status = 201 Or oHTTRequest.Status = 200 Then
        DeleteResponse = True
    Else
        DeleteResponse = False
    End If
    Set oHTTRequest = Nothing
    Exit Function
ErrRequest:
    DeleteResponse = False
    Err.Raise Err.Number, ", Err.Description"
End Function
Setelah anda buat fungsi (function) dalam Class atau modul diatas, selanjutnya anda tinggal menggunakan keempat fungsi tersebut dalam proyek VB6 dan memasukkan parameter-parameter yang dibutuhkan, serta menangkap nilai balik dari fungsi tersebut.

Artikel ini adalah contoh dari pengalaman saya dalam membuat program aplikasi yang REST/Web Service dengan VB6; Jika Anda mengalami kesulitan saat membuat parameter "X-Timestamp" atau "X-Signature", Anda dapat menghubungi saya melalui komentar pada artikel ini atau dengan email, mudah-mudahan saya dapat membantu anda; Saya berharap anda bisa mengembangkan lebih lanjut contoh sedikit program dari pengalaman saya ini, dan semoga artikel ini dapat berguna sesuai dengan tujuan anda.

1 comment:

  1. Jika Anda memiliki pertanyaan tentang hal tersebut diatas, anda bisa memberi komentar pada artikel ini atau bisa menghubungi saya lewat email.

    ReplyDelete