Artikel ini membahas dua API populer yaitu SOAP vs REST. Kita akan melihat lebih dekat apa pengertiannya, apa perbedaannya, dan bagaimana contohnya.
Section Artikel
Apa SOAP API ?
SOAP adalah singkatan dari Simple Object Access Protocol. Microsoft membuat SOAP pada tahun 1998 dan merupakan bagian integral dari Service-Oriented Architecture (SOA). Lalu, apa itu simple object access protocol ? simple object access protocol adalah protokol komunikasi web standar yang mengekspos layanan web dan mengirim data menggunakan protokol SMTP atau HTTP.
SOAP bergantung secara eksklusif pada Extensible Markup Language (XML) untuk layanan pengiriman pesan. SOAP adalah protokol resmi, lengkap dengan fitur keamanan built-in dan memiliki aturan yang ketat. SOAP sangat kompleks dan menggunakan sejumlah besar bandwidth dan sumber daya lainnya.
Kelebihan SOAP API
Berikut adalah beberapa kelebihan dari SOAP API yaitu :
- Built-in error handling
- Terstandarisasi
- SOAP berfungsi dengan baik di lingkungan perusahaan terdistribusi
- SOAP adalah platform, bahasa, dan transportasi independent
- SOAP mendukung proses otomatisasi dengan beberapa produk bahasa
Kekurangan SOAP API
Berikut adalah beberapa kekurangan dari SOAP API yaitu :
- SOAP sangat kompleks
- SOAP memiliki kinerja yang buruk jika dibandingkan dengan REST
- SOAP kurang fleksibel
Contoh SOAP API
Mari kita lihat contoh SOAP API, yang dirender dalam bahasa pemrograman yang berbeda.
- Perl
#!/usr/bin/perl -w use Data::Dumper; #use SOAP::Lite ( +trace => all, maptype => {} ); use SOAP::Lite; #$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; my $soap = SOAP::Lite->proxy('https://localhost/AFA/php/ws.php?wsdl'); # Do not verify the SSL key $soap->transport->ssl_opts( verify_hostname => 0, SSL_verify_mode => 0x00 ); # # Login to AFA Web Service # sub ConnectAFA { my $sUserName = shift; # User name my $sPassword = shift; # Password my $sDomain = shift; # Domain name or empty for non domain envirnment $sDomain = (!defined $sDomain) ? '' : $sDomain; my $method = SOAP::Data->name('ConnectRequest')->attr({xmlns => 'https://www.algosec.com/afa-ws'}); my @params = ( SOAP::Data->name(UserName => $sUserName), SOAP::Data->name(Password => $sPassword), SOAP::Data->name(Domain => $sDomain) ); my $sSessionID = $soap->call($method => @params)->result; } # # Executing query request # sub ExecQuery { my $sSessionID = shift; my $sQueryTarget = shift; $sQueryTarget = (!defined $sQueryTarget) ? '' : $sQueryTarget; my $method = SOAP::Data->name('QueryRequest')->attr({xmlns => 'https://www.algosec.com/afa-ws'}); my $QueryInput = SOAP::Data->name('QueryRequest')->attr({xmlns => 'https://www.algosec.com/afa-ws'}); my @params = ( SOAP::Data->name(SessionID => $sSessionID), SOAP::Data->name(QueryInput => \SOAP::Data->value( SOAP::Data->name(Source => '*'), SOAP::Data->name(Destination => '*'), SOAP::Data->name(Service => '80'), SOAP::Data->name(Service => '443') ) ), SOAP::Data->name(QueryTarget => $sQueryTarget) ); return $soap->call($method => @params); } # # Disconnect from AFA Web Service (terminate session) # sub DisconnectAFA { my $sSessionID = shift; my $method = SOAP::Data->name('DisconnectRequest')->attr({xmlns => 'https://www.algosec.com/afa-ws'}); my @params = ( SOAP::Data->name(SessionID => $sSessionID), ); return $soap->call($method => @params)->valueof('//DisconnectResponse'); } my $sSessionID = ConnectAFA('admin', 'algosec', ''); print "\n"; print "Session ID: '" . $sSessionID ."'"; print "\n"; my $QueryResult = ExecQuery($sSessionID, 'afa-276'); foreach my $Result ($QueryResult->valueof('//QueryResult/')) { print Dumper($Result); } print "\n"; my $Disconnect = DisconnectAFA($sSessionID); print "Disconnect: "; print $Disconnect; print "\n";
#!/usr/bin/python from SOAPpy import SOAPProxy def ConnectAFA(params): # username/password username = params['UserName'] password = params['Password'] domain = params['Domain'] proxy = 'https://'+sHost+'/AFA/php/ws.php?wsdl' namespace = 'https://www.algosec.com/afa-ws' server = SOAPProxy(proxy, namespace) if (DebugMode): # uncomment these for debugging output server.config.dumpHeadersIn = 1 server.config.dumpHeadersOut = 1 server.config.dumpSOAPOut = 1 server.config.dumpSOAPIn = 1 response = server.ConnectRequest(UserName=username, Password=password, Domain=domain) return response def SendQueryRequest(params): # username/password SessionID = params['SessionID'] QueryInput = params['QueryInput'] proxy = 'https://'+sHost+'/AFA/php/ws.php?wsdl' namespace = 'https://www.algosec.com/afa-ws' server = SOAPProxy(proxy, namespace) if (DebugMode): # uncomment these for debugging output server.config.dumpHeadersIn = 1 server.config.dumpHeadersOut = 1 server.config.dumpSOAPOut = 1 server.config.dumpSOAPIn = 1 response = server.QueryRequest(SessionID=SessionID, QueryInput=QueryInput) return response def DisconnectAFA(params): # username/password SessionID = params['SessionID'] proxy = 'https://'+sHost+'/AFA/php/ws.php?wsdl' namespace = 'https://www.algosec.com/afa-ws' server = SOAPProxy(proxy, namespace) if (DebugMode): # uncomment these for debugging output server.config.dumpHeadersIn = 1 server.config.dumpHeadersOut = 1 server.config.dumpSOAPOut = 1 server.config.dumpSOAPIn = 1 response = server.DisconnectRequest(SessionID=SessionID) return response sHost = '192.168.3.82' #DebugMode = True DebugMode = False print "\n" + "Submitting connect request:" + "\n" values = {'UserName': 'admin', 'Password': 'algosec', 'Domain': ''} afa_connect = ConnectAFA(values) SessionID = afa_connect print "Returned Session ID: "+repr(SessionID) print "\n" + "Submitting query request:" + "\n" QueryParams = {'SessionID': SessionID,'QueryInput': {'Source': '192.168.1.100', 'Destination': '10.228.16.10', 'Service': 'tcp/22'}} QueryResult = SendQueryRequest(QueryParams) print QueryResult print "\n" + "Submitting disconnect request:" + "\n" DisconnectParams = {'SessionID': SessionID} DisconnectResult = DisconnectAFA(DisconnectParams) print DisconnectResult
Apa itu REST API ?
REST adalah singkatan dari Representational State Transfer. REST adalah gaya arsitektur yang memungkinkan program untuk berkomunikasi satu sama lain, dirancang terutama untuk berfungsi dengan komponen seperti file, komponen media, dan objek pada perangkat keras tertentu. REST dirancang untuk mengatasi kekurangan SOAP dan menawarkan cara yang lebih mudah untuk mengakses layanan web.
Layanan web yang dibuat menggunakan gaya arsitektur REST dikenal sebagai layanan web RESTful. REST sangat populer di kalangan pengembang yang merancang API publik.
Saat membandingkan SOAP vs REST, maka REST lebih berbasis kepada data, dan tergantung pada protokol komunikasi tanpa status, biasa disebut dengan HTTP. Meskipun REST dapat menyusun data menggunakan YAML, XML, atau format lain yang dapat dibaca mesin, REST juga dapat menggunakan JSON untuk Menyusun data.
Kelebihan REST API
Berikut adalah beberapa kelebihan dari REST API yaitu :
- REST mudah dipelajari
- REST sangat efisien dan cepat
- Filosofi desainnya lebih sejalan dengan teknologi web lainnya
- Menggunakan standar yang mudah dipahami seperti OpenAPI Specification 3.0 dan Swagger
Kekurangan REST API
Berikut adalah beberapa kekurangan dari REST API yaitu :
- REST tidak seaman SOAP
- REST tidak cocok untuk lingkungan terdistribusi
Contoh REST API
Mari kita lihat contoh dari REST API
- Permintaan REST API pertama yang harus dibuat oleh programmer adalah login.
POST /api/2.2/auth/signin HTTP/1.1 HOST: my-server Content-Type:text/xml <tsRequest> <credentials name="administrator" password="passw0rd"> <site contentUrl="" /> </credentials> </tsRequest>
- Berikut cara membuat permintaan untuk mendapatkan daftar pengguna.
GET /api/2.2/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users/users HTTP/1.1 GET /api/2.2/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users/users HTTP/1.1 HOST: my-server X-Tableau-Auth: 12ab34cd56ef78ab90cd12ef34ab56cd
- Dan akhirnya, berikut adalah permintaan untuk memperbarui pengguna yang ada.
PUT /api/2.2/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d HTTP/1.1 HOST: my-server X-Tableau-Auth: 12ab34cd56ef78ab90cd12ef34ab56cd Content-Type: text/xml <tsRequest> <user fullName="NewUser2" siteRole="ViewerWithPublish" /> </tsRequest>
SOAP vs. REST
Berikut adalah beberapa perbedaan antara SOAP API dan REST API
SOAP | REST |
Adalah protokol | Adalah gaya arsitektur |
Tidak dapat menggunakan REST karena REST adalah gaya arsitektur | Dapat menggunakan layanan web SOAP karena ini adalah protokol seperti HTTP |
Menggunakan Java API “JAX-WS” untuk layanan webnya | Menggunakan Java API “JAX-RS” untuk layanan webnya |
Menentukan standar yang harus diikuti secara ketat | Tidak begitu banyak standar, sebagai rekomendasi dan memiliki pedoman yang tidak ketat |
Mendefinisikan keamanannya sendiri | Bergantung pada langkah-langkah keamanan dari transportasi yang mendasarinya |
Menggunakan bandwidth yang jauh lebih banyak daripada REST | Membutuhkan bandwidth yang jauh lebih sedikit daripada SOAP |
Hanya memperbolehkan format data XML | Memungkinkan format data seperti Teks biasa, HTML, JSON, XML, dan lain-lain. |
Menggunakan antarmuka layanan untuk mengekspos logika bisnis | Menggunakan URI untuk mengekspos logika bisnis |
SOAP digerakkan oleh fungsi. | REST berbasis data. |
Meskipun REST telah menjadi lebih populer daripada SOAP, namun SOAP sangat cocok untuk layanan web tingkat perusahaan yang menggunakan transaksi kompleks dan membutuhkan keamanan tinggi. API SOAP sangat ideal untuk gateway pembayaran, manajemen identitas, perangkat lunak CRM, dan layanan keuangan.