طبق استانداردی که W3C مشخص کرده، Web Service یک لایه ارتباطی (اینترفیس) هست که امکان اتصال ماشین به ماشین رو فراهم می کنه.
برای اینکار چند چیز اهمیت داره:
- از پروتوکول های استاندارد (معمولاً HTTP) برای برقراری اتصال استفاده کنه
- از فرمت های داده ی استاندارد قابل پردازش توسط ماشین استفاده کنه (مثل XML)
- قابلیتی رو پیاده سازی کنه یک ماشین از متدهای قابل ارائه توسط این وب سرویس بتونه اطلاع پیدا کنه ( WSDL)
این مفهوم در ابتدا شامل استاندارد پذیرفته شده ی اون زمان می شده، که در تکنولوژی های دات نت هم پیاده سازی به همین شکل بوده. فرمت انتقال داده XML بوده، که بصورت پیام های SOAP این انتقال صورت میگیره. و از WSDL هم برای شرح متدهای وب سرویس استفاده می شده.
بعنوان مثال این یک نمونه از WSDL مربوط به سرویس پرداخت بانک ملت هست:
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name="IPaymentGateway" targetNamespace="http://interfaces.core.sw.bps.com/" xmlns:ns1="http://interfaces.core.sw.bps.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xs:schema elementFormDefault="unqualified" targetNamespace="http://interfaces.core.sw.bps.com/" version="1.0" xmlns:tns="http://interfaces.core.sw.bps.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bpChargePayRequest" type="tns:bpChargePayRequest" />
<xs:element name="bpChargePayRequestResponse" type="tns:bpChargePayRequestResponse" />
<xs:element name="bpCumulativeDynamicPayRequest" type="tns:bpCumulativeDynamicPayRequest" />
<xs:element name="bpCumulativeDynamicPayRequestResponse" type="tns:bpCumulativeDynamicPayRequestResponse" />
<xs:element name="bpDynamicPayRequest" type="tns:bpDynamicPayRequest" />
<xs:element name="bpDynamicPayRequestResponse" type="tns:bpDynamicPayRequestResponse" />
<xs:element name="bpInquiryRequest" type="tns:bpInquiryRequest" />
<xs:element name="bpInquiryRequestResponse" type="tns:bpInquiryRequestResponse" />
<xs:element name="bpPayRequest" type="tns:bpPayRequest" />
<xs:element name="bpPayRequestResponse" type="tns:bpPayRequestResponse" />
<xs:element name="bpRefundInquiryRequest" type="tns:bpRefundInquiryRequest" />
<xs:element name="bpRefundInquiryRequestResponse" type="tns:bpRefundInquiryRequestResponse" />
<xs:element name="bpRefundRequest" type="tns:bpRefundRequest" />
<xs:element name="bpRefundRequestResponse" type="tns:bpRefundRequestResponse" />
<xs:element name="bpRefundVerifyRequest" type="tns:bpRefundVerifyRequest" />
<xs:element name="bpRefundVerifyRequestResponse" type="tns:bpRefundVerifyRequestResponse" />
<xs:element name="bpReversalRequest" type="tns:bpReversalRequest" />
<xs:element name="bpReversalRequestResponse" type="tns:bpReversalRequestResponse" />
<xs:element name="bpSaleReferenceIdRequest" type="tns:bpSaleReferenceIdRequest" />
<xs:element name="bpSaleReferenceIdRequestResponse" type="tns:bpSaleReferenceIdRequestResponse" />
<xs:element name="bpSettleRequest" type="tns:bpSettleRequest" />
<xs:element name="bpSettleRequestResponse" type="tns:bpSettleRequestResponse" />
<xs:element name="bpVerifyRequest" type="tns:bpVerifyRequest" />
<xs:element name="bpVerifyRequestResponse" type="tns:bpVerifyRequestResponse" />
<xs:element name="bpVirtualPayRequest" type="tns:bpVirtualPayRequest" />
<xs:element name="bpVirtualPayRequestResponse" type="tns:bpVirtualPayRequestResponse" />
<xs:complexType name="bpVerifyRequest">
<xs:sequence>
<xs:element name="terminalId" type="xs:long" />
<xs:element minOccurs="0" name="userName" type="xs:string" />
<xs:element minOccurs="0" name="userPassword" type="xs:string" />
<xs:element name="orderId" type="xs:long" />
<xs:element name="saleOrderId" type="xs:long" />
<xs:element name="saleReferenceId" type="xs:long" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpVerifyRequestResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpRefundInquiryRequest">
<xs:sequence>
<xs:element name="terminalId" type="xs:long" />
<xs:element minOccurs="0" name="userName" type="xs:string" />
<xs:element minOccurs="0" name="userPassword" type="xs:string" />
<xs:element name="orderId" type="xs:long" />
<xs:element name="refundOrderId" type="xs:long" />
<xs:element name="refundReferenceId" type="xs:long" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpRefundInquiryRequestResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpRefundVerifyRequest">
<xs:sequence>
<xs:element name="terminalId" type="xs:long" />
<xs:element minOccurs="0" name="userName" type="xs:string" />
<xs:element minOccurs="0" name="userPassword" type="xs:string" />
<xs:element name="orderId" type="xs:long" />
<xs:element name="refundOrderId" type="xs:long" />
<xs:element name="refundReferenceId" type="xs:long" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpRefundVerifyRequestResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpSettleRequest">
<xs:sequence>
<xs:element name="terminalId" type="xs:long" />
<xs:element minOccurs="0" name="userName" type="xs:string" />
<xs:element minOccurs="0" name="userPassword" type="xs:string" />
<xs:element name="orderId" type="xs:long" />
<xs:element name="saleOrderId" type="xs:long" />
<xs:element name="saleReferenceId" type="xs:long" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpSettleRequestResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpDynamicPayRequest">
<xs:sequence>
<xs:element name="terminalId" type="xs:long" />
<xs:element minOccurs="0" name="userName" type="xs:string" />
<xs:element minOccurs="0" name="userPassword" type="xs:string" />
<xs:element name="orderId" type="xs:long" />
<xs:element name="amount" type="xs:long" />
<xs:element minOccurs="0" name="localDate" type="xs:string" />
<xs:element minOccurs="0" name="localTime" type="xs:string" />
<xs:element minOccurs="0" name="additionalData" type="xs:string" />
<xs:element minOccurs="0" name="callBackUrl" type="xs:string" />
<xs:element name="payerId" type="xs:long" />
<xs:element name="subServiceId" type="xs:long" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpDynamicPayRequestResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpVirtualPayRequest">
<xs:sequence>
<xs:element name="terminalId" type="xs:long" />
<xs:element minOccurs="0" name="userName" type="xs:string" />
<xs:element minOccurs="0" name="userPassword" type="xs:string" />
<xs:element name="orderId" type="xs:long" />
<xs:element name="amount" type="xs:long" />
<xs:element minOccurs="0" name="localDate" type="xs:string" />
<xs:element minOccurs="0" name="localTime" type="xs:string" />
<xs:element minOccurs="0" name="additionalData" type="xs:string" />
<xs:element minOccurs="0" name="callBackUrl" type="xs:string" />
<xs:element name="payerId" type="xs:long" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpVirtualPayRequestResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpReversalRequest">
<xs:sequence>
<xs:element name="terminalId" type="xs:long" />
<xs:element minOccurs="0" name="userName" type="xs:string" />
<xs:element minOccurs="0" name="userPassword" type="xs:string" />
<xs:element name="orderId" type="xs:long" />
<xs:element name="saleOrderId" type="xs:long" />
<xs:element name="saleReferenceId" type="xs:long" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpReversalRequestResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpCumulativeDynamicPayRequest">
<xs:sequence>
<xs:element name="terminalId" type="xs:long" />
<xs:element minOccurs="0" name="userName" type="xs:string" />
<xs:element minOccurs="0" name="userPassword" type="xs:string" />
<xs:element name="orderId" type="xs:long" />
<xs:element name="amount" type="xs:long" />
<xs:element minOccurs="0" name="localDate" type="xs:string" />
<xs:element minOccurs="0" name="localTime" type="xs:string" />
<xs:element minOccurs="0" name="additionalData" type="xs:string" />
<xs:element minOccurs="0" name="callBackUrl" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpCumulativeDynamicPayRequestResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpPayRequest">
<xs:sequence>
<xs:element name="terminalId" type="xs:long" />
<xs:element minOccurs="0" name="userName" type="xs:string" />
<xs:element minOccurs="0" name="userPassword" type="xs:string" />
<xs:element name="orderId" type="xs:long" />
<xs:element name="amount" type="xs:long" />
<xs:element minOccurs="0" name="localDate" type="xs:string" />
<xs:element minOccurs="0" name="localTime" type="xs:string" />
<xs:element minOccurs="0" name="additionalData" type="xs:string" />
<xs:element minOccurs="0" name="callBackUrl" type="xs:string" />
<xs:element name="payerId" type="xs:long" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpPayRequestResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpSaleReferenceIdRequest">
<xs:sequence>
<xs:element name="terminalId" type="xs:long" />
<xs:element minOccurs="0" name="userName" type="xs:string" />
<xs:element minOccurs="0" name="userPassword" type="xs:string" />
<xs:element name="orderId" type="xs:long" />
<xs:element name="saleOrderId" type="xs:long" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpSaleReferenceIdRequestResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpChargePayRequest">
<xs:sequence>
<xs:element name="terminalId" type="xs:long" />
<xs:element minOccurs="0" name="userName" type="xs:string" />
<xs:element minOccurs="0" name="userPassword" type="xs:string" />
<xs:element name="orderId" type="xs:long" />
<xs:element name="amount" type="xs:long" />
<xs:element minOccurs="0" name="localDate" type="xs:string" />
<xs:element minOccurs="0" name="localTime" type="xs:string" />
<xs:element minOccurs="0" name="additionalData" type="xs:string" />
<xs:element minOccurs="0" name="callBackUrl" type="xs:string" />
<xs:element name="payerId" type="xs:long" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpChargePayRequestResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpInquiryRequest">
<xs:sequence>
<xs:element name="terminalId" type="xs:long" />
<xs:element minOccurs="0" name="userName" type="xs:string" />
<xs:element minOccurs="0" name="userPassword" type="xs:string" />
<xs:element name="orderId" type="xs:long" />
<xs:element name="saleOrderId" type="xs:long" />
<xs:element name="saleReferenceId" type="xs:long" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpInquiryRequestResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpRefundRequest">
<xs:sequence>
<xs:element name="terminalId" type="xs:long" />
<xs:element minOccurs="0" name="userName" type="xs:string" />
<xs:element minOccurs="0" name="userPassword" type="xs:string" />
<xs:element name="orderId" type="xs:long" />
<xs:element name="saleOrderId" type="xs:long" />
<xs:element name="saleReferenceId" type="xs:long" />
<xs:element name="refundAmount" type="xs:long" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="bpRefundRequestResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="bpReversalRequest">
<wsdl:part element="ns1:bpReversalRequest" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpPayRequestResponse">
<wsdl:part element="ns1:bpPayRequestResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpPayRequest">
<wsdl:part element="ns1:bpPayRequest" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpRefundRequest">
<wsdl:part element="ns1:bpRefundRequest" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpSettleRequest">
<wsdl:part element="ns1:bpSettleRequest" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpInquiryRequestResponse">
<wsdl:part element="ns1:bpInquiryRequestResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpVerifyRequestResponse">
<wsdl:part element="ns1:bpVerifyRequestResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpInquiryRequest">
<wsdl:part element="ns1:bpInquiryRequest" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpSaleReferenceIdRequest">
<wsdl:part element="ns1:bpSaleReferenceIdRequest" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpDynamicPayRequestResponse">
<wsdl:part element="ns1:bpDynamicPayRequestResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpReversalRequestResponse">
<wsdl:part element="ns1:bpReversalRequestResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpVerifyRequest">
<wsdl:part element="ns1:bpVerifyRequest" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpRefundVerifyRequestResponse">
<wsdl:part element="ns1:bpRefundVerifyRequestResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpRefundVerifyRequest">
<wsdl:part element="ns1:bpRefundVerifyRequest" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpRefundInquiryRequest">
<wsdl:part element="ns1:bpRefundInquiryRequest" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpSettleRequestResponse">
<wsdl:part element="ns1:bpSettleRequestResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpRefundInquiryRequestResponse">
<wsdl:part element="ns1:bpRefundInquiryRequestResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpCumulativeDynamicPayRequest">
<wsdl:part element="ns1:bpCumulativeDynamicPayRequest" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpVirtualPayRequest">
<wsdl:part element="ns1:bpVirtualPayRequest" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpDynamicPayRequest">
<wsdl:part element="ns1:bpDynamicPayRequest" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpChargePayRequest">
<wsdl:part element="ns1:bpChargePayRequest" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpCumulativeDynamicPayRequestResponse">
<wsdl:part element="ns1:bpCumulativeDynamicPayRequestResponse " name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpRefundRequestResponse">
<wsdl:part element="ns1:bpRefundRequestResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpVirtualPayRequestResponse">
<wsdl:part element="ns1:bpVirtualPayRequestResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpChargePayRequestResponse">
<wsdl:part element="ns1:bpChargePayRequestResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="bpSaleReferenceIdRequestResponse">
<wsdl:part element="ns1:bpSaleReferenceIdRequestResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="IPaymentGateway">
<wsdl:operation name="bpVerifyRequest">
<wsdl:input message="ns1:bpVerifyRequest" name="bpVerifyRequest">
</wsdl:input>
<wsdl:output message="ns1:bpVerifyRequestResponse" name="bpVerifyRequestResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="bpRefundInquiryRequest">
<wsdl:input message="ns1:bpRefundInquiryRequest" name="bpRefundInquiryRequest">
</wsdl:input>
<wsdl:output message="ns1:bpRefundInquiryRequestResponse" name="bpRefundInquiryRequestResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="bpRefundVerifyRequest">
<wsdl:input message="ns1:bpRefundVerifyRequest" name="bpRefundVerifyRequest">
</wsdl:input>
<wsdl:output message="ns1:bpRefundVerifyRequestResponse" name="bpRefundVerifyRequestResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="bpSettleRequest">
<wsdl:input message="ns1:bpSettleRequest" name="bpSettleRequest">
</wsdl:input>
<wsdl:output message="ns1:bpSettleRequestResponse" name="bpSettleRequestResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="bpDynamicPayRequest">
<wsdl:input message="ns1:bpDynamicPayRequest" name="bpDynamicPayRequest">
</wsdl:input>
<wsdl:output message="ns1:bpDynamicPayRequestResponse" name="bpDynamicPayRequestResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="bpVirtualPayRequest">
<wsdl:input message="ns1:bpVirtualPayRequest" name="bpVirtualPayRequest">
</wsdl:input>
<wsdl:output message="ns1:bpVirtualPayRequestResponse" name="bpVirtualPayRequestResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="bpReversalRequest">
<wsdl:input message="ns1:bpReversalRequest" name="bpReversalRequest">
</wsdl:input>
<wsdl:output message="ns1:bpReversalRequestResponse" name="bpReversalRequestResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="bpCumulativeDynamicPayRequest">
<wsdl:input message="ns1:bpCumulativeDynamicPayRequest" name="bpCumulativeDynamicPayRequest">
</wsdl:input>
<wsdl:output message="ns1:bpCumulativeDynamicPayRequestResponse " name="bpCumulativeDynamicPayRequestResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="bpPayRequest">
<wsdl:input message="ns1:bpPayRequest" name="bpPayRequest">
</wsdl:input>
<wsdl:output message="ns1:bpPayRequestResponse" name="bpPayRequestResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="bpSaleReferenceIdRequest">
<wsdl:input message="ns1:bpSaleReferenceIdRequest" name="bpSaleReferenceIdRequest">
</wsdl:input>
<wsdl:output message="ns1:bpSaleReferenceIdRequestResponse" name="bpSaleReferenceIdRequestResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="bpChargePayRequest">
<wsdl:input message="ns1:bpChargePayRequest" name="bpChargePayRequest">
</wsdl:input>
<wsdl:output message="ns1:bpChargePayRequestResponse" name="bpChargePayRequestResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="bpInquiryRequest">
<wsdl:input message="ns1:bpInquiryRequest" name="bpInquiryRequest">
</wsdl:input>
<wsdl:output message="ns1:bpInquiryRequestResponse" name="bpInquiryRequestResponse">
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="bpRefundRequest">
<wsdl:input message="ns1:bpRefundRequest" name="bpRefundRequest">
</wsdl:input>
<wsdl:output message="ns1:bpRefundRequestResponse" name="bpRefundRequestResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
همونطور که مشخص هست، بصورت کامل نوع داده ها تعریف شده و کلاینت ملزم هست از این قوائد پیروی کنه.
Web API نوعی از وب سرویس هست، که از الگوی REST برای پیاده سازی استفاده می کنه. REST اجباری در شکل پیاده سازی نمی کنه (مثلاً حتماً از XML بعنوان فرمت داده استفاده بشه)
در REST برای اشاره عملیات مورد نظر از URI و HTTP Verbs استفاده می کنیم، مثلاً:
GET /user/22
که URI برابر هست با user/22/ و verb هم GET هست. و معنیش این هست که قصد داریم اطلاعات یک یوزر با آیدی 22 رو دریافت کنیم
ممکنه این API، متدهای PUT و PATCH رو هم برای این URI پیاده سازی کرده باشه، که در اینصورت معنیش این هست که اطلاعات یوزر با کد 22 رو بصورت کامل (PUT) و یا بخش هایی از اون (PATCH) رو آپیدت کن.
البته توجه داشته باشید که اینها استاندارد های تعیین شده هست، اما ممکنه در یک پیاده سازی توسط یک شرکت یا سرویس خاص، مثلاً از متد POST برای آپدیت اطلاعات استفاده شده باشه.
به دلیل اینکه REST بر اساس استانداردهای HTTP پیاده سازی شده و نیازمندی های دیگه ای رو الزام نکرده، برای استفاده از از این نوع وب سرویس ها نیاز نیست کار خاصی بکنید.
عملاً وقتی آدرس URL مثلاً گوگل رو در مرورگر وارد می کنید، مرورگر یک درخواست GET به اون URL میفرسته. یا وقتی فرمی رو در سایتی پر می کنید، از متد POST برای ارسال داده استفاده می کنید.
فرمت ورودی/خروجی اطلاعات توسط سازنده ی وب سرویس تعیین میشه، که هر فرمتی میتونه باشه. البته به دلیل سادگی ساختار JSON، این فرمت محبوبیت زیادی پیدا کرده و بیشتر وب سرویس ها از این فرمت استفاده می کنن.
در اندروید برای استفاده از Web API کار خاصی نیاز نیست بکنید، همونطور که گفتم خود استاندارد الزامی برای فرمت داده های ورودی/خروجی نداره، پس این مورد رو در داکیومنت های API موردنظر میخونید و بر اساس نوع فرمت داده، Parser های مورنیاز رو استفاده می کنید.
دو کتابخانه ی محبوب در اندروید OkHttp و Volley هستند. کتابخانه ی Retrofit بصورت خاص برای RESTful Web API ساخته شده.
برای استفاده از SOAP-based Web Service به دلیل شکل خاص پیاده سازیش، باید از الگوی خاصی پیروی کنید (مثلاً پیام ها باید در بسته های SOAP ارسال بشن). بهترین کتابخانه ای که من دیدم kSOAP هست.