Ugrás a fő tartalomra

SOAP és REST webszolgáltatások alapjai

SOAP és REST webszolgáltatások alapjai 


SOAP és REST webszolgáltatások alapvetően két különböző megközelítést jelentenek az adatok cseréjére webes környezetben.



SOAP (Simple Object Access Protocol)

Jellemzők:

  • XML alapú protokoll, amelyet webszolgáltatások közötti kommunikációra terveztek.

  • Erősen strukturált és szabványosított (pl. WS-Security, WS-ReliableMessaging).

  • WSDL (Web Services Description Language) fájlt használ az interfész és az üzenetformátum leírására.

  • Transport független (nem csak HTTP, hanem SMTP, JMS stb. is használható).

  • Erősen tipizált, ami előnyt jelenthet komplex üzleti logika esetén.

SOAP Üzenetstruktúra:

  1. Envelope – Az üzenet teljes csomagolása.

  2. Header – Metaadatokat tartalmazhat (pl. biztonsági tokenek).

  3. Body – Az üzenet fő tartalma (a tényleges adat).

  4. Fault – Hibaüzenetek esetén használatos.

SOAP Példa egy XML üzenetre:

---xml

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://example.com/webservice"> <soapenv:Header/> <soapenv:Body> <web:GetUserDetails> <web:UserId>12345</web:UserId> </web:GetUserDetails> </soapenv:Body> </soapenv:Envelope>

SOAP előnyei és hátrányai:

Előnyök:

  • Platform- és nyelvfüggetlen.

  • WS-* szabványok révén biztonságos (WS-Security, WS-Policy).

  • Jobban támogatott vállalati rendszerekben (pl. banki API-k).

Hátrányok:

  • Nagyobb adatforgalmat generál az XML formátum miatt.

  • Nehezebb implementálni és karbantartani.

  • Kevésbé rugalmas a modern, könnyű API-khoz képest.


REST (Representational State Transfer)

Jellemzők:

  • HTTP protokollra épülő, könnyűsúlyú architektúra.

  • Általában JSON vagy XML adatformátumot használ.

  • Nincsenek kötelező szabványok, inkább best practice-ek léteznek.

  • CRUD (Create, Read, Update, Delete) műveleteket a HTTP metódusokon keresztül valósítja meg:

    • GET – Adatok lekérése.

    • POST – Új erőforrás létrehozása.

    • PUT – Meglévő erőforrás módosítása.

    • DELETE – Erőforrás törlése.

REST API példák:

1. GET kérés JSON válasszal

Kérés:

---nginx

GET https://api.example.com/users/123

Válasz:

---json

{ "id": 123, "name": "John Doe", "email": "johndoe@example.com" }

2. POST kérés új felhasználó létrehozására

Kérés:

---bash

POST https://api.example.com/users Content-Type: application/json
---json

{ "name": "Jane Doe", "email": "janedoe@example.com" }

Válasz (201 Created):

---json

{ "id": 124, "name": "Jane Doe", "email": "janedoe@example.com" }

REST előnyei és hátrányai:

Előnyök:

  • Egyszerű, gyors, könnyen implementálható.

  • JSON támogatása miatt kevesebb sávszélességet használ.

  • Könnyen integrálható különböző rendszerekkel és frontendekkel.

Hátrányok:

  • Kevésbé szabványosított, mint a SOAP.

  • Biztonsági megoldások implementálása az API fejlesztő feladata (OAuth, JWT, API key).

  • Nem ideális komplex üzleti logika esetén (például tranzakciókezelés).


SOAP vs REST összehasonlítás

TulajdonságSOAPREST
AdatformátumXMLJSON, XML, más
SzabványosításErősen szabványosítottNincsenek kötelező szabványok
BiztonságWS-Security, WS-PolicyOAuth, JWT, API key
HTTP metódusokNem követi az HTTP metódusokatCRUD műveletekhez igazodik
Általános használatBanki, vállalati rendszerekMobilalkalmazások, web API-k
Adatméret és sebességNagyobb méret, lassabbKönnyebb, gyorsabb



SoapUI és Postman használata


SoapUI

  • SoapUI egy népszerű eszköz SOAP és REST API-k tesztelésére.

  • Lehetővé teszi a WSDL alapján generált kérések küldését.

  • Automatikus validáció és teszt szkriptelési lehetőségek (Groovy scripting).

  • Kiválóan alkalmas vállalati API-k és összetett tesztek automatizálására.

SoapUI használata SOAP webszolgáltatás tesztelésére:

  1. WSDL Importálása: Nyisd meg a SoapUI-t → New Project → Add WSDL.

  2. Request küldése: Kattints a generált SOAP kérésre és szerkeszd az adatokat.

  3. Tesztfuttatás: Küldd el a kérést és nézd meg a választ.



Postman

  • Postman főként REST API tesztelésére használt eszköz.

  • Támogatja az API key, OAuth 2.0 és más autentikációs módszereket.

  • Automatikus request/response formázás (JSON, XML, raw text).

  • Képes szkriptek és automatizált tesztek végrehajtására JavaScript-ben.

Postman használata REST API tesztelésére:

  1. Új kérés létrehozása: Kattints a „New Request”-re, add meg az URL-t.

  2. Metódus kiválasztása: GET, POST, PUT, DELETE stb.

  3. Adatok beállítása: Headers, Body (JSON formátumban).

  4. Kérés küldése: „Send” gombbal.

  5. Válasz elemzése: JSON válasz, státuszkódok és időmérés.


Összegzés

  • SOAP jól strukturált, erős biztonsági és szabványos megoldásokat kínál, de nehezebb és lassabb.

  • REST egyszerűbb, rugalmasabb és jobban illeszkedik a modern webes és mobil környezetekhez.

  • SoapUI a SOAP webszolgáltatások tesztelésére, Postman pedig REST API-k tesztelésére kiváló eszköz.



1. API hitelesítési módszerek és tesztelésük

Az API-k hitelesítése elengedhetetlen a biztonságos adatkezeléshez. A leggyakrabban használt hitelesítési mechanizmusok:

1.1 API kulcs (API Key)

  • Az ügyfél egy előre generált egyedi API-kulcsot kap, amelyet a kérésekben elküld.

  • Használat REST API esetén:

    • Az API kulcs az Authorization headerben vagy query paraméterként szerepel.

📌 Példa Postman-ben API Key hitelesítés tesztelésére:

  1. Nyiss egy új GET kérést a Postman-ben.

  2. URL:

    ---arduino

    https://api.example.com/data?api_key=12345abcdef
  3. Vagy headerben küldd:

    ---vbnet

    Authorization: Api-Key 12345abcdef
  4. Küldd el a kérést, és ellenőrizd a válasz státuszát (200 OK vagy 403 Forbidden).


1.2 Basic Authentication (Felhasználónév/Jelszó)

  • HTTP alapú hitelesítés, ahol az Authorization fejlécben egy base64 kódolt felhasználónév/jelszó páros található.

  • Használat:

    • Authorization: Basic base64(felhasználónév:jelszó)

📌 Példa:

  1. Postman-ben:

    • Authorization fül → Basic Auth kiválasztása.

    • Add meg a felhasználónevet és jelszót.

  2. A kérés Authorization fejlécében így jelenik meg:

    ---makefile

    Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

1.3 OAuth 2.0 (Access Token alapú hitelesítés)

  • Az ügyfél először egy OAuth szervertől hozzáférési tokent kér, majd minden API kérésben ezt használja.

  • Használat REST API esetén:

    • Authorization: Bearer <access_token>

📌 Példa Postman-ben OAuth 2.0 tesztelésre:

  1. Request Token lekérdezése:

    ---bash

    POST https://auth.example.com/oauth/token Content-Type: application/x-www-form-urlencoded

    Body:

    ---ini

    client_id=your_client_id&client_secret=your_client_secret&grant_type=client_credentials
  2. Access Token használata API híváshoz:

    ---sql

    GET https://api.example.com/protected-data Authorization: Bearer your_access_token

1.4 SOAP WS-Security (Username Token, Timestamp, Signature)

SOAP esetén a hitelesítés történhet WS-Security szabványok szerint.

📌 Példa WS-Security SOAP üzenetre:

---xml

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <soapenv:Header> <wsse:Security> <wsse:UsernameToken> <wsse:Username>admin</wsse:Username> <wsse:Password>password</wsse:Password> </wsse:UsernameToken> </wsse:Security> </soapenv:Header> <soapenv:Body> <GetUserDetails> <UserId>12345</UserId> </GetUserDetails> </soapenv:Body> </soapenv:Envelope>

📌 SoapUI WS-Security beállítása:

  1. Request szerkesztése: Nyisd meg a SOAP kérést.

  2. WS-Security header hozzáadása:

    • Kattints az Auth fülre → Add WSS UsernameToken.

    • Adj meg egy felhasználónevet és jelszót.

  3. Tesztelés: Küldd el a kérést és ellenőrizd a válasz státuszát.


2. Performancia vizsgálat API-k esetén

A teljesítményvizsgálatok célja az API válaszidejének, terhelhetőségének és skálázhatóságának ellenőrzése.

2.1 JMeter használata API performancia tesztelésre

Apache JMeter az egyik legnépszerűbb eszköz API teljesítményteszteléshez.

📌 Alap teszt beállítása JMeter-ben:

  1. Thread Group létrehozása:

    • Állítsd be a párhuzamos kérések számát (pl. 100 thread).

  2. HTTP Request hozzáadása:

    • Állítsd be az API végpontot és a metódust (pl. GET /users).

  3. Listeners hozzáadása:

    • View Results Tree és Summary Report a válaszidők elemzéséhez.

  4. Teszt futtatása:

    • Kattints a „Start” gombra és elemezd a válaszidőket.

📌 Jelentős metrikák:

  • Response Time (ms) – API válaszideje.

  • Throughput (requests/sec) – Másodpercenkénti kérések száma.

  • Error Rate (%) – Sikertelen válaszok aránya.


2.2 Load tesztelés Postman-ben

Postman újabban támogatja az egyszerűbb teljesítménytesztelést is.

📌 Load teszt Postman Collection Runner-rel:

  1. Készíts egy Collection-t a tesztelendő API kérésekkel.

  2. Nyisd meg a Runner-t, állítsd be:

    • Iteration (ismétlések száma): Pl. 1000.

    • Delay (késleltetés kérésenként): Pl. 100 ms.

  3. Futtasd és elemezd az eredményeket.


2.3 K6 – Modern Load Testing eszköz

Ha fejlesztőbarát, JavaScript alapú load tesztelő eszközt keresel, a K6 jó választás lehet.

📌 Egyszerű K6 szkript egy REST API tesztelésére:

---javascript

import http from 'k6/http'; import { check, sleep } from 'k6'; export let options = { vus: 50, // 50 párhuzamos felhasználó duration: '30s', // 30 másodpercig fut }; export default function () { let res = http.get('https://api.example.com/data'); check(res, { 'status is 200': (r) => r.status === 200, }); sleep(1); }

📌 Futtatás parancssorból:

---bash

k6 run loadtest.js

Összegzés

API hitelesítés:

  • REST: API Key, Basic Auth, OAuth 2.0.

  • SOAP: WS-Security, Username Token.

Performancia tesztelés:

  • JMeter: Nagyméretű terheléses tesztek.

  • Postman Runner: Egyszerűbb load tesztek.

  • K6: JavaScript-alapú modern tesztelés.



API Hitelesítési Teszt Scriptek

API kulcs tesztelése Postman-ben (Pre-request Script)

Postman-ben használhatsz pre-request scripteket az API kulcs beállításához.

📌 Pre-request Script:

---javascript

pm.request.headers.add({ key: "Authorization", value: "Api-Key 12345abcdef" });

📌 Ellenőrzés a Tests fülön:

---javascript

pm.test("Status code is 200", function () { pm.response.to.have.status(200); });

 OAuth 2.0 Token lekérése és használata (Postman Pre-request Script)

Postman-nel automatikusan lekérheted a tokent, majd használhatod a további kérésekhez.

📌 Pre-request Script OAuth 2.0 token lekérésére:

---javascript

pm.sendRequest({ url: "https://auth.example.com/oauth/token", method: "POST", header: { "Content-Type": "application/x-www-form-urlencoded" }, body: { mode: "urlencoded", urlencoded: [ { key: "client_id", value: "your_client_id" }, { key: "client_secret", value: "your_client_secret" }, { key: "grant_type", value: "client_credentials" } ] } }, function (err, res) { if (!err) { let accessToken = res.json().access_token; pm.environment.set("access_token", accessToken); } });

📌 Request fejlécekben használat:

---javascript

pm.request.headers.add({ key: "Authorization", value: "Bearer " + pm.environment.get("access_token") });

SOAP WS-Security Token beállítása SoapUI-ban (Groovy Script)

SOAP API-k esetén WS-Security tokent adhatsz hozzá a kéréshez.

📌 Groovy Script egy UsernameToken létrehozásához SoapUI-ban:

---groovy

import com.eviware.soapui.support.types.StringToStringMap def request = testRunner.testCase.testSteps["SOAP Request"].testRequest def headers = new StringToStringMap() headers.put("wsse:Security", "<wsse:UsernameToken><wsse:Username>admin</wsse:Username><wsse:Password>password</wsse:Password></wsse:UsernameToken>") request.setRequestHeaders(headers)



 API Performancia Teszt Scriptek


 JMeter HTTP API Teszt Szkript

JMeter-ben az alábbi XML konfigurációval lehet REST API teljesítménytesztet végezni.

📌 JMeter test plan (testplan.jmx) – 100 egyidejű felhasználó, 10 másodpercig

---xml

<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="API Load Test" enabled="true"> <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Users" enabled="true"> <stringProp name="ThreadGroup.num_threads">100</stringProp> <stringProp name="ThreadGroup.ramp_time">5</stringProp> <stringProp name="ThreadGroup.duration">10</stringProp> </ThreadGroup> <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="API Request" enabled="true"> <stringProp name="HTTPSampler.domain">api.example.com</stringProp> <stringProp name="HTTPSampler.path">/data</stringProp> <stringProp name="HTTPSampler.method">GET</stringProp> </HTTPSamplerProxy> </TestPlan>

📌 Futtatás JMeter-ben:

---sh

jmeter -n -t testplan.jmx -l results.jtl

K6 Load Test Szkript REST API-hoz

📌 K6 szkript – 50 párhuzamos felhasználó, 30 másodpercig

---javascript

import http from 'k6/http'; import { check, sleep } from 'k6'; export let options = { vus: 50, // virtuális felhasználók duration: '30s', // teszt időtartama }; export default function () { let res = http.get('https://api.example.com/data'); check(res, { 'status is 200': (r) => r.status === 200, 'response time is below 200ms': (r) => r.timings.duration < 200 }); sleep(1); }

📌 Futtatás parancssorból:

---sh

k6 run loadtest.js

 Load Teszt Postman-ben (Collection Runner)

Postman is használható teljesítménytesztelésre az alábbi módon.

📌 Collection Runner beállítások:

  1. Iteration count: 1000

  2. Delay: 50 ms

  3. Run with: JSON test script

📌 Tests fülön validálás:

---javascript

pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); pm.test("Response time is acceptable", function () { pm.expect(pm.response.responseTime).to.be.below(200); });

Összegzés

API hitelesítési tesztek:

  • Postman pre-request script API kulcshoz és OAuth 2.0 tokenhez.

  • SOAP WS-Security hitelesítés Groovy szkripttel SoapUI-ban.

Performancia vizsgálati szkriptek:

  • JMeter XML konfiguráció 100 felhasználóra.

  • K6 load test szkript REST API-hoz.

  • Postman Collection Runner teljesítménytesztelés.






Megjegyzések