Showing posts with label web service. Show all posts
Showing posts with label web service. Show all posts

Tuesday, March 02, 2010

Lagi lagi API untuk Telekomunikasi: OneAPI

Seperti sudah dijelaskan sebelumnya, usaha untuk membuat API atau interface yang membuka layanan dari operator atau provider telekomunikasi telah dilakukan beberapa organisasi, salah satunya adalah OneAPI yang diusing oleh GSM Assosiation, sebuah organisasi atau asosiasi internasional yang beranggotakan operator/provider telekomunikasi GSM dan vendor telekomunikasi.

Awalnya proyek OneAPI ini dinamai 3rd party access, yang dari namanya sudah jelas tujuannya adalah membuat API untuk memberikan akses kepada pihak ketiga ke layanan atau network yang dimiliki operator telekomunikasi.

Saya tidak akan membahas terlalu jauh tentang OneAPI karena API ini belum lama muncul, belum mature dan informasi atau dokumentasinya pun masih sangat minim.

Proyek pilot secara komersialnya baru dilakukan bulan lalu (Februari 2010), sedangkan spesifikasi dan dokumentasinya baru akan dirilis bulan Maret 2010. Saat ini API ini baru menspesifikasikan fungsi-fungsi untuk Messaging (SMS and MMS), Location, Payments dengan tekonologi Web Service dan RESTful. Spesifikasi OneAPI ini kemungkinan akan dikeluarkan oleh OMA.

Rencananya, OneAPI versi 2 akan memasukan fungsi-fungsi berikut:
  • Data Connection profile
  • QoS Quality of Service
  • Remaining Credits Look-Up
  • SMS triggering via UDH
  • In-app billing
Lebih lanjut tentang OneAPI ini bisa dilihat di portal atau di library.


OneAPI: The first standard telecom RESTful API?
Saya sendiri bertanya-tanya mengapa dibuat standar baru dengan teknologi REST? Yang jelas REST ini lebih sederhana dibanding SOAP dan juga mudah karena menggunakan protokol HTTP.

Dan yang pasti beberapa vendor memang sudah mulai menggunakan REST sebagai interface untuk solusi SDP. Coba anda baca artikel "Who Makes What: RESTful Service Delivery Platforms". Bisa jadi RESTful API akan semakin banyak digunakan menggantikan SOAP seiring dengan makin populernya konsep Telco 2.0.




Monday, June 02, 2008

Pengenalan Parlay/OSA

Parlay merupakan nama sebuah group (konsorsium indrustri) yang berfokus untuk membuat application programming interface (API) untuk jaringan telepon (operator) sehingga mempermudah pembuatan service baru baik dalam jaringan operator itu sendiri maupun service yang diberikan oleh partner (service provider).

Parlay dibentuk awal tahun 1998 dengan anggotanya adalah British Telecommunications PLC (BT), Microsoft, Nortel, Siemens dan Ulticom. Pada awalnya Parlay adalah organis tertutup untuk kemudian pada tahun 2000 keanggotaannya mulai terbuka dan sampai sekarang telah memiliki puluhan anggota termasuk vendor-vendor besar telekomunikasi maupun software.

IDE dari Parlay adalah untuk membuat standar interface yang terbuka sebagai protokol yang menghubungkan antara elemen network seperti SSF (Service Switching Function) dan SCF (Service Control Function) dan lain-lain dengan pihak lain (third party) sehingga mempermudah menambahan (deploy) service baru. API yang didesain tidak spesifik pada teknologi akses tertentu sehingga dapat direalisasikan atau dipetakan (mapping) pada teknologi yang spesifik seperti CORBA, Java, RPC, DCOM, Web service, dan lain-lain.

Spesifikasi Parlay tidak hanya memberikan sebuah interface standar tapi lebih dari itu Parlay menspesifikasikan sebuah framework yang mencakup security sehingga menjamin kemanan akses terhadap elemen yang dimiliki operator telekomunikasi juga service management.

Gambar dibawah ini menunjukan posisi Parlay dalam sebuah jaringan operator telekomunikasi.

+------------------------+
| Core Network Operator |
| |
| +--------+ +---------+ +-------------------+
| | Switch |<---->| Parlay |<====>| Service Provider |
| +--------+ | +---------+ +-------------------+
| | ^ |
| +--------+ | | |
| | IN |<---' | |
| +--------+ | |
| | |
| +-------------+ | |
| | Elemen lain |<---' |
| +-------------+ |
| |
+------------------------+


Spesifikasi API yang telah dibuat oleh Parlay pada akhir tahun 1999 diadopsi oleh ETSI dan 3GPP yang sedang mengembangkan OSA (Open Service Architecture). ETSI/3GPP melakukan penambahan minor pada Parlay tapi sejak Parlay rilis 3.0 atau OSA rilis 5, kedua bisa dibilang identik. Ada 2 interface yang tidak dicakup oleh OSA rilis 5 dari spesifikasi Parlay 3.0 yaitu policy management dan presence and availability (PAM).

Dibawah ini sejarah perkembangan spesifikasi Parlay:


  • Tahun 1999 mengeluarkan rilis 1.0
  • Tahun 1999 mengeluarkan rilis 1.1
  • Tahun 1999 mengeluarkan rilis 1.2 digunakan 3GPP sebagai spesifikasi OSA rilis 99
  • Tahun 2000 mengeluarkan rilis 2.0
  • Awal tahun 2001 mengeluarkan rilis 2.1 digunakan 3GPP sebagai spesifikasi OSA rilis
  • Desember 2001 mengeluarkan rilis 3.0 yang identik dengan 3GPP OSA rilis 5 sehingga sering ditulis Parlay/OSA.
  • Mei 2003 mengeluarkan Parlay X versi 1 yaitu web service interface.

Saat ini versi terakhir dari Parlay adalah versi 6.0. Pada 3GPP spesifikasi tersebut dapat ditemukan pada TS 29.198 Release 7.

Semua versi spesifikasi dapat didownload disini atau di website ETSI.


Dalam dokumen spesifikasi Parlay/OSA dibagi dalam beberapa grup interface yaitu:

  1. Call Control. yang terdiri dari 5 sub bagian yaitu:
    • Call Control Common Definitions
    • Generic Call Control
    • Multi-Party Call Control
    • Multi-Media Call Control
    • Conference Call Control
  2. User Interaction
  3. Mobility
  4. Terminal Capabilities
  5. Data Session Control
  6. Generic Messaging
  7. Connectivity Manager
  8. Account Management
  9. Charging
  10. Policy Management
  11. Presence and Availability Management
  12. Multi-Media Messaging
  13. Service Broker

Friday, May 02, 2008

OASIS Telecom: Organisasi standard-SOA untuk telekomunikasi

OASIS (Organization for the Advancement of Structured Information Standards), sebuah konsorsium untuk standar terbuka yang telah dikenal sebagai organisasi yang mengeluarkan standar-standar untuk Web Service mamupun Service Oriented Architecture (SOA) belum lama ini membuat divisi baru yaitu OASIS Telecom yang berfokus pada pekerjaan untuk memuat sebuah model bisnis baru yang membuat layanan telekomunikasi menjadi lebih pintar (intelligent), lebih dapat diaplikasikan (deployable), dan mudah untuk digunakan.

Ini menunjukan bahwa SOA akan semakin banyak digunakan dalam arsitektur telekomunikasi yang akan datang dan mendorong perusahaan telekomunikasi menjadi tidak sekedar sebagai access provider tapi juga service provider.

Seperti kita tau SOA telah mulai diadopsi jauh sebelum sekarang. Parlay/OSA maupun Parlay X merupakan standar yang sudah diadopsi oleh ETSI, 3GPP sebagai API web service untuk industri telekomunikasi. Lalu seperti apa nantinya standar yang akan dibuat OASIS Telecom? Mungkin akan bisa kita lihat nanti di OASIS Telecom website yang telah dibuat walaupun isinya belum banyak.

Press release dapat dibaca disini.

Wednesday, November 29, 2006

Kirim SMS menggunakan MMAP.


Bisnis content untuk telepon selular di Indonesia saat ini sangat besar. Hal ini
membuat perusahaan content provider semakin banyak tumbuh. Perusahaan content
provider bekerja sama dengan operator selular untuk dapat menjakau konsumennya. Di
Indonesia protokol yang digunakan oleh content provider untuk menerima atau
mengirimkan SMS kebanyakan dibuat sendiri oleh operator dan tidak standar.


Operator-operator biasanya menggunakan protokol sendiri dengan alasan kesederhanaan
dan kemudahan. Operator yang menggunakan protokol standar untuk menerima dan mengirim
SMS biasanya menggunakan protokol SMPP. Artikel ini membahas secara singkat tentang
protokol MMAP/SMAP yang merupakan alternatif protokol untuk menerima atau mengirim
SMS antar operator dan content provider.

-= Definisi =-

MMAP (Mobile Messaging Access Protocol) mendefinisikan seatu cara untuk melakukan
pertukaran pesan bergerak (mobile message) menggunakan SOAP. MMAP hanya
mendefinisikan bagain bagaimana koneksi antara dua entitas dan suatu mobile message
dipertukarkan, oleh karenanya MMAP disebut SOAP access framework. MMAP dapat
digunakan untuk melakukan pertukan data XML yang anda buat sendiri, tetapi biasanya
MMAP digunakan sebagai pembungkus protokol SMAP. Format MMAP mengikuti standar SOAP
1.2 dan biasanya menggunakan HTTP sebagai transport protokolnya. MMAP menggunakan
tidak menggunakan model SOAP RPC tetapi menggunakan SOAP messaging model (document
model).


-= SMAP =-

SMAP adalah suatu set XML elemen untuk mengirimkan, menerimana dam me-manage suatu
pesan singkat (SMS). SMAP hanya mendefinikan suatu set XML dokumen (elemen) tapi
tidak mendefinisikan bagaimana XML dokumen tersebut dipertukarkan. SMAP dapat
dimasukan (embed) dalam MMAP sehingga menjadi protokol yang lengkap untuk pertukaran
data SMS.

-= Menggapa menggunakan MMAP/SMAP? =-

Dibandingkan dengan protokol yang dibuat sendiri (proprietary protocol), MMAP
merupakan standar terbuka sehingga memudahkan untuk dikuti semua operator dan content
provider.

Dibandingkan SMPP yang merupakan binary protokol, MMAP lebih mudah dipelajari dan
dibuat implementasinya karena MMAP berbasiskan SOAP (teks). Hal ini juga membuat MMAP
mudah di-debug.

-= Alasan untuk belum menggunakan MMAP? =-

Dibanding proprietary protocol, tentu saja MMAP/SMAP lebih lengkap dan lebih rumit
untuk diimplementasikan. Selain itu, library untuk MMAP/SMAP yang gratis sejauh ini
belum ada. Hal ini berbeda dengan SMPP, library untuk SMPP yang gratis banyak
terdapat di internet sehingga akan memudahkan developer untuk menggunakan protokol
SMPP.


-= Penggunaan MMAP/SMAP =-

Ilustrasi penggunakan MMAP dan SMAP dapat dilihat pada gambar dibawah ini.

-------------------------------
| ,---------. ,---------. |
| | Message | | | | ,----------.
| | center |<---->| SMS | | MMAP/SMAP | |
| | (SMSC) | | Gateway | |<---------->| Aplikasi |
| `---------' | Function| | | |
| | | | `----------'
| `---------' |
| Mobile message service |
-------------------------------

- Mobile center adalah elemen yang bertanggung jawab untuk meneruskan pesan ke tujuan
misalnya nomor telepon selular seseorang.

- SMS gateway function adalah elemen yang memberikan layanan koneksi terhadap
aplikasi atau elemen lain yang akan menggirimkan pesan. SMS gateway function tersebut
bisa jadi telah ada dalam message center (SMSC) sehingga bukan merupakan elemen
terpisah dari message center.

- Aplikasi merupakan elemen yang membutuhkan layanan untuk dapat mengirim atau
menerima pesan. Aplikasi pada diagram diatas biasanya adalah aplikasi eksternal yang
dibuat oleh rekanan dari operator misalnya content provider. Karena MMAP/SMAP
merupakan standar terbuka dan gratis, content provider dapat dengan mudah
menggunakannya untuk mengirimkan atau menerima pesan (content) kepada pelanggannya.

-= Struktur MMAP =-

MMAP memiliki 2 bagian yaitu:

1. MMAP header
MMAP header berisi informasi application context misalnya, session, kontrol akses
(username dan password), billing, dan parameter-parameter lain yang bisa ditambahan.
MMAP header berada pada SOAP header. Contoh MMAP header:

<MMAP:MMAPHeader soap:mustUnderstand="1"
xmlns:MMAP="http://www.smsforum.net/schemas/mmap/v1.0"
xsi:schemaLocation="http://www.smsforum.net/schemas/mmap/v1.0
http://www.smsforum.net/schemas/mmap/v1.0/mmap.xsd">
<MMAP:ApplicationContext bodyType="Request" sourceOperationReference="123"/>
<MMAP:AccessControl>
<MMAP:ApplicationIdentity>testApp</mmap:ApplicationIdentity>
<MMAP:Authentication>
<MMAP:Password>secret</mmap:Password>
</MMAP:Authentication>
</MMAP:AccessControl>
<MMAP:ServiceContext serviceName="test"/>
</MMAP:MMAPHeader>

2. Request/response MMAP data.
MMAP data berada pada SOAP body yang membawa informasi standar untuk operasi request
dan response.

Fungsi MMAP sebagai access framework yang hanya menspesifikasikan operasi untuk
me-maintain koneksi atau session saja, tergambar dari semua XML data elemen yang
dimilikinya berikut ini:

BindRequest,
BindResponse/BindBackResponse,
BindBack request,
UnbindRequest,
UnbindResponse,
BatchRequest,
BatchResponse,
BatchResult request,
EnquireLink request,
EnquireLinkResponse,
SuccessResponse,
ErrorResponse

Dibawah ini adalah contoh suatu SOAP message yang menunjukan tempat bagian MMAP
berada:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2003/05/soap-envelope
http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<!-- MMAP header disini -->
</soap:Header>
<soap:Body>
<!- MMAP data element disini -->
</soap:Body>
</soap:Envelope>

-= Mode Operasional MMAP =-

Ada 4 mode operasional hubungan antar aplikasi dengan message service pada MMAP,
yaitu:

1. Mode Immediate.
Pada mode ini aplikasi tidak menyimpan session untuk koneksifitas dengan mobile
message service. Mobile message service hanya mengirimkan respon hanya jika diminta.
Mode ini dapat digunakan untuk mengirimkan pesan saja. Pesan berada di SOAP body
element dan operasi MMAP tidak diperlukan pada mode ini.

2. Mode client-session.
Pada mode ini aplikasi menyimpan (maintain) session dengan message service dengan
cara mengirimkan bind request. Setiap SOAP message yang kirim berisi sebuah
application context yang mengidentidikasikan session yang dimiliki client.

Proses ini diawali dengan client menggirimkan BindRequest ke message service. Pada
element BindRequest, sessionType parameter pada elemen SessionControl berisi
"client". Message service meresponse dengan membawa informasi session ID pada MMAP
header dan elemen BindResponse pada SOAP body.

Setelah melakukan proses bind, maka client dapat melakukan pengiriman pesan. Mode ini
diakhiri client dengan mengirimkan UnbindRequest ke message service dan message
service akan mengirimkan UnbindResponse pada client.

3. Mode Peer-to-peer
Pada mode ini, aplikasi dan message service melakkan session dua arah (bi-directional
session) sehingga komunikasi dapat dilakukan secara asynchronous. Message service
akan memberikan respon segera setelah menerima pesan dari client. Respon tersebut
hanya mengindikasikan bahwa message service telah menerima pesan. Setelah pesan
diproses makan message service akan mengirimkan respon lagi kepada client.

Proses ini diawali dengan client menggirimkan BindRequest ke message service. Berbeda
dengan mode client-session, pada mode ini sessionType parameter berisi "peer".
Kemudian message service akan meresponse dengan BindResponse dan informasi session IF
pada MMAP header. Selain merespon BindRequest, message service dengan segera juga
akan mengirimkan BindBackRequest ke client. Client atau aplikasi akan merespon
BindBackRequest dengan BindBackResponse dan menginformasikan session ID pada MMAP
header.

Mode ini diakhiri dengan pengiriman UnbindRequest dari client ke message service dan
sebaliknya.

4. Mode batch
Pada mode ini, message service menerimana satu set MMAP request untuk diproses.

Aplikasi mengirimkan BatchRequest ke message service dan direspon dengan BatchReponse
yang menunjukkan request telah diterima. Kemudian message service akan memproses
setiap operasi yang ada dalam batch request. Setelah selesai semua operasi, message
service akan mengirimkan BatchResult request yang berisi status hasil tiap-tiap
proses. Client menerima BatchResult result dan meresnponse dengan SuccessResponse.

-= Contoh =-

Berikut ini adalah contoh pesan MMAP/SMAP lengkap untuk mengirimkan SMS menggunakan
mode immediate:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2003/05/soap-envelope
http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<MMAP:MMAPHeader soap:mustUnderstand="1"
xmlns:MMAP="http://www.smsforum.net/schemas/mmap/v1.0"
xsi:schemaLocation="http://www.smsforum.net/schemas/mmap/v1.0
http://www.smsforum.net/schemas/mmap/v1.0/mmap.xsd">
<MMAP:ApplicationContext bodyType="Request" sourceOperationReference="123"/>
<MMAP:ServiceContext serviceName="test"/>
</MMAP:MMAPHeader>
</soap:Header>
<soap:Body>
<smap:SubmitRequest xmlns:smap="http://www.smsforum.net/schemas/smap/v1.0"
xsi:schemaLocation="http://www.smsforum.net/schemas/smap/v1.0
http://www.smsforum.net/schemas/smap/v1.0/smap.xsd">
<smap:ShortMessage>
<smap:Header>
<smap:Destination>
<smap:Number>+12345679</smap:Number>
</smap:Destination>
</smap:Header>
<smap:Body>
<smap:Text>Hello world</smap:Text>
</smap:Body>
</smap:ShortMessage>
</smap:SubmitRequest>
</soap:Body>
</soap:Envelope>

-= Penutup =-

Penjelasan yang lebih detail tentang MMAP dapat dibaca pada dokumen spesifikasinya
yang dapat di download dari:

http://smsforum.net/doc/download.php?id=smppv34 (versi 3.4)
http://smsforum.net/doc/download.php?id=smppv50 (versi 5.0)

Untuk implementasi MMAP/SMAP, situs tersebut juga menyediakan file XML schema untuk
MMAP maupun SMAP yang dapat didownload secara terpisah.

Thursday, May 11, 2006

JAX-RPC berubah menjadi JAX-WS

JAX-RPC (Java API for XML Based RPC) yang dispesifikasikan pada JSR-101 berubah nama menjadi JAX-WS (Java API for XML Web Services) dengan spesifikasi JSR-224.

Perubahan ini terjadi pada versi JAX-RPC 2.0, setelah JAX-RPC 1.1

Hal ini karena kesalahaan penamaan awal sebab JAX-RPC memberi kesan spesifikasi/library hanya untuk RPC padahal sebenarnya termasuk juga untuk Web Services.

Perubahan mendasar pada versi ini adalah digunakannya JAXB sebagai library untuk databinding.

Katanya dengan JAX-WS dibanding JAX-RPC maka generated code dari WSDL akan lebih sedikit (dalam hal line of code dan tentu saja size/byte) dan coding menjadi lebih mudah.

Tetapi target platform JAX-WS adalah Java SE 5, jadi jangan harap yang masih menggunakan JDK/JRE 1.4 bisa menggunakannya. Pada library ini code yang kita buat dimudahkan dengan adanya annotation yang mulai ada pada JDK/JRE versi 1.5

Seperti versi sebelumnya JAX-WS ini memenuhi standar:
  • WS-I Basic Profile 1.1
  • WS-I Attachments Profile 1.0
  • WS-I Simple SOAP Binding Profile 1.0

Yang saya tidak suka adalah, JAX-WS ini akan dimasukan dalam standar library JRE/JDK yaitu pada versi Mustang (Java SE 6). Buat saya seharusnya library ini cukup dimasukan ke spesifikasi Java Enterprise (JEE) sehingga JRE tidak semakin besar dan dipenuhi dengan framework-framework yang bukan inti (core libray).

Friday, March 18, 2005

WS-* spesification map

Kalau kita belajar web service maka kita akan dibingungkan dengan banyaknya spesifikasi/standar yang digunakan. Spesifikasi web service biasanya open sehingga mudah dipelajari tapi karena banyaknya perusahaan atau organisasi yang membuat spesifikasi yang kadang mirip, kita jadi dibingungkan dengan spesifikasi tersebut. Spesifikasi yang mirip biasanya mulcul karena memang merupakan solusi untuk masalah yang sama.

Jika ingin melihat bagaimana rumitnya spesifikasi web service, kita bisa lihat peta "Web Services & WS_* Specifications"

Selain itu juga kita bisa lihat Big Picture of the XML family Of Spesifications.

Tuesday, March 15, 2005

PHP: NuSOAP dan DIME attachment

Butuh sending atau receiving DIME attachment pada web service manggunakan NuSOAP?

Saat ini saya sedang membuat sebuah class tambahan agar class soapclient dapat mendukung DIME attachment. Class ini dibuat seperti class soapclientmime pada file nusoapdime.php yang dibuat oleh Scott Nichol. Karena PEAR::SOAP sudah mendukung DIME attachment, maka dengan bantuan class Net_DIME dari PEAR maka pekerjaan ini jadi lebih mudah.

Saat ini create DIME attachment yang saya bikin untuk request (memmbuat DIME message untuk dikirim) sudah selesai. Inti perkerjaannya adalah disini :

function &_makeDIMEMessage(&$xml) {
// See class nusoap_base
$namespaces = 'http://schemas.xmlsoap.org/soap/envelope/';

// encode any attachments using DIME (see this link)
// now we have to DIME encode the message
$dime =& new Net_DIME_Message();
$msg =& $dime->encodeData($xml,$namespaces,NULL,NET_DIME_TYPE_URI);

// add the attachements
$c = count($this->requestAttachments);
for ($i=0; $i < $c; $i++) {
$attachment =& $this->requestAttachments[$i];
if ($attachment['data'] == '' && $attachment['filename'] <> '') {
if ($fd = fopen($attachment['filename'], 'rb')) {
$data = fread($fd, filesize($attachment['filename']));
fclose($fd);
} else {
$data = '';
}
$attachment['data'] = $data;
}
$msg .= $dime->encodeData($attachment['data'],
$attachment['contenttype'],
$attachment['cid'],
NET_DIME_TYPE_MEDIA);
}
$msg .= $dime->endMessage();
return $msg;
}
Selanjutnya agar NuSOAP support DIME attachment kita perlu penambahan kapabilitas untuk menerima response DIME message dan kapabilitas pada WSDL.

Friday, March 11, 2005

PHP: NuSOAP with certificate authentication

Dirjen Pajak Indonesia membuat Web Service untuk pelaporan pajak dari individu ataupun lembaga/perusahaan. Ini ide bagus, tapi sayang implementasinya kurang bagus. Saya tidak terlibat dengan project tersebut tapi setidaknya tau.

Web service yang dibuat tersebut disebut dengan eFiling (Electronic Filing System) yang maksudnya adalah layanan untuk mengirimkan Surat Pemberitahuan Pajak Tahunan (SPT) secara online. Web service tersebut dijual ke beberapa ASP (Application Service Provider), kemudian ASP tersebut membuat aplikasi sendiri yang mudah digunakan oleh masyarakat luas.

Implementasi web service tersebut menggunakan .NET, sayangnya pengembang proyek tidak memperhatikan interoperability dan kurang peduli dengan dokumentasi. Sehingga menyulitkan ASP untuk membuat aplikasinya. Walaupun saya bukan salah seorang dari ASP yang ada tapi saya tau sekali hal ini. Dengar-dengar proyek ini sudah berlangsung lama, lebih dari setahun dan hingga saat ini belum satu pun ASP yang benar-benar siap untuk menjual produk/layanannya ke masyarakat, padahal eFiling ini sudah diluncurkan oleh Presiden.

Tapi saya bukan ingin mengomentari proyek tersebut. Saya hanya memberikan highlight bahwa dalam pembangunan web service yang melibatkan banyak pihak yang menggunakannya masalah interoperability, dokumentasi dan keamanan sangatlah penting.

Implementasi web service ini cukup baik dilihat dari segi keamanan (security). eFiling menerapkan user authentication, XML-Encryption, XML Digital Signature (XML-Dsig), dan menggunakan SSL (HTTPS) dengan koneksi dedicated (antara ASP dan Dirjen Pajak). Keempat hal tersebut sudah cukup untuk membuat web service cukup aman.

User authentication yang digunakan adalah dengan mekanisme login menggunakan username dan password. XML-Encryption dan XML-DSig, karena standar yang umum/bebas dan gratis sudah banyak diimplementasikan. SSL dengan authentikasi sertifikat juga hal yang sudah biasa didunia web. Tapi sayangnya eFiling menggunakan DIME (Direct Internet Message Encapsultion) untuk mekanisme attachment pada SOAP. DIME adalah standar Microsoft, pernah disubmit ke IETF tapi tidak pernah menjadi RTF. Mekanisme attachment untuk web service, kita bisa menggunakan standar SOAP with attachments (Sw/A).

Implementasi web service client untuk eFiling ini akan sangat sulit jika kita ingin menggunakan PHP. Ini karena PHP tidak memiliki library yang memadai untuk standar-standar web service (WS-*). Setelah bersusah payah mencari-cari dengan google, akhirnya didapatkan NuSOAP sebagai kandidat utama untuk mencoba implementasi web service client untuk eFiling. Kenapa NuSOAP, karena library ini support koneksi dengan SLL dan authentication dengan digital certificate. Tapi ternyata NuSOAP tidak mendukung XML-Encryption dan XML-DSig dan DIME. Library PHP PEAR::SOAP mendukung DIME attachment dengan package DIME_Attachment tapi sayangnya tidak support authentication dengan digital certificate.

Tidak adanya library untuk XML-Encryption dan XML-DSig membuat aplikasi PHP harus dibuat saling beroperasi dengan aplikasi yang dibuat dengan bahasa lain yang memiliki library untuk kedua fungsi tersebut.

NuSOAP yang digunakan juga perlu mengalami perubahan untuk bisa sukses digunakan ketika authentication menggunakan digital certificate. Dibawah ini contoh code PHP menggunakan library nusoap.er.php (NuSOAP yang sudah dimodifikasi, saya akan upload code ini lain waktu) :
<html>
<head>
<title>DJP SOAP test</title>
</head>
<body>
<?
require_once('nusoap.er.php');

$soapclient = new soapclient('https://eFiling:1208/certReqWs/RegistrationService.asmx?WSDL','wsdl');

$username="";
$password="";
$certparams = array('cainfofile' => '/home/ejlp/htdocs/.cert/CADJP.cert',
'sslcertfile' => '/home/ejlp/htdocs/.cert/korupsipajak.cert.pem',
'sslkeyfile' => '/home/ejlp/htdocs/.cert/korupsipajak.key.pem',
'passphrase' => 'password');
$soapclient->setCredentials($username,$password,'certificate', $certparams);
ini_set("soap.wsdl_cache_enabled", "1");
$soapclient->create();

$err = $soapclient->getError();
if ($err) {
echo '<p><b>Create soapclient error: ' . $err . '</b></p>';
}

$proxy = $soapclient->getproxy();
$params = array( 'UserName' => 'test' , 'Password' => 'testpassword');
$results = $proxy->GetNPWP($params);

echo '<h3>Request:</h3> <xmp>'.$proxy->request.'</xmp>';
echo '<h3>Response:</h3> <xmp>'.$proxy->response.'</xmp>';
echo '<h3>Debug:</h3> <xmp>'.$proxy->debug_str.'</xmp>';
?>
</body>
</html>

Tuesday, February 22, 2005

Web service: standar baru untuk optimasi SOAP

- W3C XML Schema specification mensyaratkan binary data pada XML untuk diencode menggunakan base64 atau hexadecimal. Base64 encoding membuat data membesar 50%, sedangkan hexadecimal encoding memperbesar dua kalinya.

- SOAP menggunakan format XML sehingga binary data dapat diikutkan dengan menggunakan encoding. Tapi encoding binary data akan membuat file menjadi lebih besar sehingga tidak efektif karena memakan space, bandwith serta menambah proses encoding/decoding.

- Binary data dalam SOAP message bisa direpresentasikan dalam format byte array, dengan menggunakan tipe xsd:hexBinary atau xsd:base64Binary. Tapi Implemantasi SOAP biasanya tidak mendukung format byte array yang besar.

- Transfer binary data juga bisa dilakukan dengan SOAP with attachments (Sw/A), yang merupakan extension dari standar SOAP 1.1. Sw/A menggunakan MIME multipart/related message seperti pada attachement email, biasanya menggunakan base64 encoding.

- W3C membuat standar untuk mengoptimalisasi transmisi paket SOAP dengan standar XML-binary Optimized Packaging (XOP), SOAP Message Transmission Optimization Mechanism (MTOM), dan Resource Representation SOAP Header Block (RRSHB).

- XOP membuat encoding binary data pada dokumen XML menjadi lebih efisien. XOP bekerja pada level XML Information Set (Infoset) sehingga representasi abstrak dari XML dokumen dapat dapat diserialisasi (deserialize) dengan cara yang berbeda-beda.

- MTOM mendefinisikan bagaimana XOP dapat ditransmisikan dengan optimal menggunakan SOAP message. MTOM bisa menjadi solusi pengganti SOAP with Attachments (Sw/A) yang tidak di support oleh Microsoft sampai saat ini.

- RRSHB mendefiniskan bagaimana SOAP client dapat menggambil data dari original resource atau dari cache (local data) sehingga tidak perlu adanya transmisi lewat network.

- Karena ke-3 recomendation W3C tersebut baru dirilis 25 January 2005, jadi belum ada implementasi library untuk itu. Mungkin dari BEA, IBM atau Microsoft akan segera merilis library untuk memudahkan kita melakukan implementasi karena ketiga perusahaan tersebut yang banyak meberpartisipasi pada ke-3 recomendation tersebut.

- Ke-3 recomendation ini akan jadi next standar web service baru selain standar SOAP baru, SOAP 1.2

Saturday, February 05, 2005

Web service: standar dan organisasi

W3C develops interoperable technologies (specifications, guidelines, software, and tools) to lead the Web to its full potential. W3C creates a final specification or set of guidelines called Recommendation.

SOAP (Simple Object Access Protocol), WSDL (Web Services Description Language), UDDI (Universal Description, Discovery and Integration), XML (EXtensible Markup Language), XML Schema

OASIS is a not-for-profit, international consortium that drives the development, convergence, and adoption of e-business standards. Final realease of their standard called OASIS Standard.

OASIS Standards are approved within an OASIS Committee, submitted for public review, implemented by at least three organizations, and finally ratified by the Consortium's membership at-large.

WSRP (OASIS Web Services for Remote Portlets), WSS (Web Services Security),UDDI Specification, WSRM (Web Services Reliable Messaging)

WS-I is an open industry organization chartered to promote Web services interoperability across platforms, operating systems and programming languages.

WS-I makes :
  • Profiles provide implementation guidelines for how related Web services specifications should be used together for best interoperability.
  • Sample Applications demonstrate Web services applications that are compliant with WS-I guidelines.
  • Testing Tools are used to determine whether the messages exchanged with a Web service conform to WS-I guidelines.
Basic Profile 1.1, Simple SOAP Binding Profile 1.0, Attachments Profile 1.0

Friday, January 21, 2005

PHP: SOAP Web Service

Sedikit kembali ke PHP... beberapa hari ini...

Web service tidak selalu menggunakan SOAP. Selain SOAP kita bisa menggunakan XML-RPC, atau REST yang lebih simpel. SOAP lebih banyak digunakan dan library-nya pun lebih banyak tersedia. Library SOAP untuk PHP, kita bisa gunakan PEAR::SOAP, NuSOAP, PHP-SOAP atau native exstension library yang sudah ada di PHP5.

PEAR::SOAP saat ini belum ada versi stabilnya tapi saya sudah coba tidak ada masalah untuk digunakan di production. PEAR::SOAP adalah library yang ditulis dengan PHP. Sebelum menginstall PEAR::SOAP, library PEAR harus kita install dulu, kemudian package SOAP dan package dependencies lainnya. Contoh code web service client dengan PEAR::SOAP :
<?
require_once 'SOAP/Client.php';

$wsdl_url = 'http://soap.amazon.com/schemas3/AmazonWebServices.wsdl';

$proxyParams = array(
'proxy_host' => '3.19.19.2',
'proxy_port' => 8080
);

$WSDL = new SOAP_WSDL($wsdl_url, $proxyParams);
$client = $WSDL->getProxy();

$params = array(
'manufacturer' => "O'Reilly",
'mode' => 'books',
'sort' => '+title',
'page' => 1,
'type' => 'lite',
'tag' => 'trachtenberg-20',
'devtag' => 'XXXXXXXXXXXXXX',
);

$books = $client->ManufacturerSearchRequest($params);

//print_r($books);

if ($books->Details) {
foreach ($books->Details as $hit) {
$ProductName = $hit->ProductName;
$Authors = join(' and ', $hit->Authors);

print <<< _HTML_
<div style="clear:left; width: 300px; padding:5px; margin:5px; background:#ddd;">
<a href="$hit->Url"><image src="$hit->ImageUrlSmall" alt="$ProductName" align="left"></a>
<b>$ProductName</b><br/>
By $Authors<br/>
Amazon.com Price: $hit->OurPrice<br/>
</div>
_HTML_;
}
} else {
echo "<b>". $books->userinfo ."</b>";
echo "<br/>";
echo $books->message;

}


?>


NuSOAP kelihatannya juga baik dan sudah dicoba tapi saya belum bisa bandingkan dengan librari yang lain. NuSOAP terbaru dapat di download menggunakan CVS atau didownload manual di http://cvs.sourceforge.net/viewcvs.py/nusoap/. NuSOAP tidak memiliki dokumentasi, API dokumentasinya saja tidak baik. Tapi dengan contoh-contoh kode kita dapat dengan mudah menggunakannya. File-file library NuSOAP terdiri dari :

class.nusoap_base.php
class.soap_fault.php
class.soap_parser.php
class.soap_server.php
class.soap_transport_http.php
class.soap_val.php
class.soapclient.php
class.wsdl.php
class.wsdlcache.php
class.xmlschema.php
nusoap.php
nusoapmime.php


Contoh code web service client menggunakan NuSOAP :

<html>
<head>
<title>Amazon Keyword Search</title>
</head>
<body>
<?
#Use the NuSOAP php library
require_once('nusoap.php');

#Set parameters
$parameters = array('keyword' => $HTTP_GET_VARS['keyword'],
'type' => 'lite',
'page' => '1',
'mode' => 'books',
'tag' => 'insert associate tag',
'devtag' => 'insert developer token');

#Create a new SOAP client with Amazon's WSDL
$soapclient = new soapclient('http://soap.amazon.com/schemas2/AmazonWebServices.wsdl','wsdl', '3.19.19.2', '8080');

#added by ejlp12
$err = $soapclient->getError();
if ($err) {
// Display the error
echo '<p><b>Constructor error: ' . $err . '</b></p>';
// At this point, you know the call that follows will fail
}
//$soapclient->setHTTPProxy('3.193.197.2', '8080');

$proxy = $soapclient->getproxy();

#query Amazon
$results = $proxy->KeywordSearchRequest($parameters);

//echo 'Request: <xmp>'.$proxy->request.'</xmp>';
//echo 'Response: <xmp>'.$proxy->response.'</xmp>';

#Results?
if (is_array($results['Details'])) {
print "<p>Search for <b>" . $HTTP_GET_VARS['keyword'] . "</b>" .
" found " . $results['TotalResults'] . " results." .
" <br>Here are the first " . count($results['Details']).".".
" </p><ol>";
foreach ($results['Details'] as $result) {
print
"<li><b>" . $result['ProductName'] . "</b>" .
"<br /> by " . $result['Authors'][0] .
" <a href='" . $result['Url'] . "'>" . $result['OurPrice']. "</a><br>";
}
print "</ol>";
}

#No Results
else {
print "Your Amazon query for '" . $HTTP_GET_VARS['keyword'] .
"' returned no results";
}
?>
</body>
</html>


Sedangkan PHP-SOAP adalah extension library (dibuat dengan bahasa C sehingga performansinya lebih baik/cepat). Sayangnya baru merilis versi alpha-nya, dan karena dalam PHP5 SOAP extension library sudah ada (walau masih experimental) maka kemungkinan PHP-SOAP ini tidak akan banyak digunakan.

Code diatas diambil dari beberapa situs dan diedit seperlunya (ditambahkan agar dapat digunakan pada server yang ada dibelakang http proxy).

Followers