프로토콜 스타일, simple object access protocol 의 약자, 보안 수준이 엄격함, 성공 / 반복 실행로직이 규정되어 있어 처음부터 끝까지 신뢰성을 제공 ACID를 준수하여 데이터의 변형을 줄어주고 정의를 명확하게 한다.
HTTP, HTTPS, SMTP 등을 통해 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환되는 프로토콜이다.
SOAP은 웹 서비스에서 기본적인 메시지를 전달하는 기반이 된다. SOAP에는 몇 가지 형태의 메시지 패턴이 있지만, 보통의 경우 원격 프로시져 호출(RPC)패턴으로, 클라이언트에서 서버쪽으로 메시지를 요청하고, 서버는 메시지를 즉시 응답하게 된다. SOAP는 XML-RPC와 WDDX에서 envelope/header/body로 이루어진 구조와 전송과 상호 중립성의 개념을 가져왔다.
SOAP은 XML을 근간으로 헤더와 바디를 조합하는 디자인 패턴으로 설계되어 있다. 헤더는 선택사항으로 반복이나 보안 및 트랜잭션을 정보로 하는 메타 정보를 가지고 있다. 바디부분은 주요한 대부분의 정보를 다룬다.
ksoap2 라이브러리 활용 / SoapObject를
각 요청에 대한 SOAP 요청 템플릿을 만듭니다.
//SOAP 통신을 위한 변수
private static final String NAMESPACE = "https://api.authorize.net/soap/v1/";
private static final String URL ="https://apitest.authorize.net/soap/v1/Service.asmx?wsdl";
private static final String SOAP_ACTION = "https://api.authorize.net/soap/v1/AuthenticateTest";
private static final String METHOD_NAME = "AuthenticateTest";
request.addProperty("sType", sType); -> 전달 변수 명 / 파라미터 값
//request 설정
request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("sType", sType);
request.addProperty("sInputType", "JSON");
request.addProperty("sOutputType", "JSON");
request.addProperty("sEncYn", "N");
//createJson, putJson
request.addProperty("sParam", jsonObject.toString());
// Envelope 설정
envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.dotNet = true;
try {
// 웹서비스 호출
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL, 2000);
androidHttpTransport.call(SOAP_ACTION, envelope);
// 웹서비스 응답
SoapPrimitive soapPrimitive = (SoapPrimitive) envelope.getResponse();
result = envelope.getResponse().toString();
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
}