Artikel ini membahas dua API populer yaitu SOAP vs REST. Kita akan melihat lebih dekat apa pengertiannya, apa perbedaannya, dan bagaimana contohnya.
Section Artikel
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.
Berikut adalah beberapa kelebihan dari SOAP API yaitu :
Berikut adalah beberapa kekurangan dari SOAP API yaitu :
Mari kita lihat contoh SOAP API, yang dirender dalam bahasa pemrograman yang berbeda.
#!/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
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.
Berikut adalah beberapa kelebihan dari REST API yaitu :
Berikut adalah beberapa kekurangan dari REST API yaitu :
Mari kita lihat contoh dari REST API
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>
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
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>
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.