Home » Software » SOAP Vs REST : Pengertian, Perbedaan, dan Contohnya

SOAP Vs REST : Pengertian, Perbedaan, dan Contohnya

by Wahyu Saputra S.Kom
by Wahyu Saputra S.Kom

Artikel ini membahas dua API populer yaitu SOAP vs REST. Kita akan melihat lebih dekat apa pengertiannya, apa perbedaannya, dan bagaimana contohnya.

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 protokolAdalah gaya arsitektur
Tidak dapat menggunakan REST karena REST adalah gaya arsitekturDapat menggunakan layanan web SOAP karena ini adalah protokol seperti HTTP
Menggunakan Java API “JAX-WS” untuk layanan webnyaMenggunakan Java API “JAX-RS” untuk layanan webnya
Menentukan standar yang harus diikuti secara ketatTidak begitu banyak standar, sebagai rekomendasi dan memiliki pedoman yang tidak ketat
Mendefinisikan keamanannya sendiriBergantung pada langkah-langkah keamanan dari transportasi yang mendasarinya
Menggunakan bandwidth yang jauh lebih banyak daripada RESTMembutuhkan bandwidth yang jauh lebih sedikit daripada SOAP
Hanya memperbolehkan format data XMLMemungkinkan format data seperti Teks biasa, HTML, JSON, XML, dan lain-lain.
Menggunakan antarmuka layanan untuk mengekspos logika bisnisMenggunakan 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.

You may also like