Pengertian SOAP
Apa itu SOAP ? SOAP adalah singkatan dari Simple Object Access Protocol, yang pada tahun 1998 lalu diciptakan oleh Microsoft dimana project ini secara integral menjadi bagian dari SOA atau Service-Oriented Architecture.
Lalu apakah pengertian dari Simple Object Access Protocol ? yaitu protokol komunikasi web yang secara standar melakukan exposure web service dengan mengirim data memakai protokol HTTP ataupun SMTP.
Secara eksklusif, SOAP memakai tipe dokumen XML atau Extensible Markup Language, guna melakukan pengiriman pesan, SOAP juga disebut sebagai protokol legal dengan fitur keamanan yang secara built-in memiliki peraturan yang ketat,SOAP memakai bandwidth besar-besaran dengan kompleks yang sesuai resourcenya.
Kelebihan dan Kekurangan API SOAP
Berikut Creativauz rangkum beberapa kelebihan dari SOAP yang diantaranya adalah, Built-in error handling, ter-standar, SOAP akan bekerja dengan baik jika environment yang terdistribusi, SOAP sebagai transportasi sistem yang independent dan mengukung proses automatisasi beberapa bahasa pemrograman.
Sedangkan kekurangan SOAP adalah sistemnya sangat kompleks, cukup berat proses dan kinerjanya bila dibanding dengan REST, dan SOAP tidak fleksibel, berikut ini adalah contoh API SOAP jika di render dengan bahasa pemrograman yang beda, kita ambil contoh python dan perl.
#!/usr/bin/python
from SOAPpy import SOAPProxy
def ConnectAFA(params):
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):
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):
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):
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):
SessionID = params['SessionID']
proxy = 'https://'+sHost+'/AFA/php/ws.php?wsdl'
namespace = 'https://www.algosec.com/afa-ws'
server = SOAPProxy(proxy, namespace)
if (DebugMode):
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 = 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
#!/usr/bin/perl -w
use Data::Dumper;
use SOAP::Lite;
my $soap = SOAP::Lite->proxy('https://localhost/contoh-script/isi.php?wsdl');
$soap->transport->ssl_opts(
verify_hostname => 0,
SSL_verify_mode => 0x00
);
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;
}
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);
}
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";
Lebih lanjut tentang REST API
Apakah REST API itu ? REST adalah singkatan dari Representational State Transfer, yang memiliki arsitektur dengan secara sistematis yang membuat program dapat berkomunikasi satu sama lain, yang berfungsi sesuai komponen beberapa file, media hingga obyek terhadap beberapa hardware.
REST hadir untuk memenuhi ketidakstabilan dari SOAP yang memberikan kemudahan bagi developer atau programmer atau para pembuat software untuk menciptakan program secara mudah mengakses web service, secara arsitektur service, REST disebut sebagai RESTful, sekarang ini memang banyak developer yang merancang Public API.
Saat akan menentukan apakah memakai SOAP atau REST, tentu harus mengetahui dasarnya, yaitu jika memakai REST, lebih berbasis data, yang bergantung dengan protokol komunikasi tanpa status men-detail, atau yang bisa disebut dengan HTTP.
REST bisa mengolah data berupa YAML, XML ataupun format lainnya, sederhananya, REST memakai format JSON dan SOAP memakai XML.
Kelebihan dan Kekurangan REST API
Sebagai versi terbaik dari SOAP, tentu REST memiliki kelebihan,diantaranya adalah, kemudahan dipelajari dan dioperasikan, karenanya REST sangatlah efisien dan cepat, strukturnya amat sesuai dengan teknologi website masa kini, memakai standar yang portable seperti Swagger dan OpenAPI 3.0
Meski begitu, tidak ada yang sempurna dan ada kekurangan dari REST API, yaitu REST tidak lebih secure dari SOAP, untuk envirnment terdistribusi, REST sangatlah tidak cocok.
Dibawah ini adalah contoh dari REST API, dimana dengan code yang melakukan request RESTAPI yang dibuat dengan fungsi login.
POST /api/2.2/auth/signin HTTP/1.1
HOST: my-server
Content-Type:text/xml
Disini adalah cara request untuk mendapat daftar dari user
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
Sedangkan dibawah ini ada request untuk UPDATE data user
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