PDA

View Full Version : تفاوت وب سرویس با وب API



arezoo682
چهارشنبه 06 بهمن 1395, 18:51 عصر
سلام دوستان
این سوالمو توی اینترنت سرچ کردم، ولی جوابشو پیدا نکردم. تفاوت وب سرویس با وب ای پی ای (web api) در اندروید چیه؟
مبحثش برام جا نیافتاده. البته مقاله هایی در مورد هرکدوم را بطور جداگانه خواندم ولی در مورد تفاوتش چیزی دستگیرم نشد. ممنون می شم راهنماییم کنید.
با تشکر فراوان

abrenoor
پنج شنبه 07 بهمن 1395, 07:47 صبح
سلام دوستان
این سوالمو توی اینترنت سرچ کردم، ولی جوابشو پیدا نکردم. تفاوت وب سرویس با وب ای پی ای (web api) در اندروید چیه؟
مبحثش برام جا نیافتاده. البته مقاله هایی در مورد هرکدوم را بطور جداگانه خواندم ولی در مورد تفاوتش چیزی دستگیرم نشد. ممنون می شم راهنماییم کنید.
با تشکر فراوان

سلام، این سوال منم هست!!!
ممنون میشم از پاسختون.

Nevercom
پنج شنبه 07 بهمن 1395, 10:10 صبح
طبق استانداردی که 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 هست.

godofphp
جمعه 08 بهمن 1395, 18:40 عصر
دوست عزیز
API رابط برنامه نویسی هست فرقی نمیکنه چی باشه وب سرویس یه نوع API هست که مخصوص وب هست اسمشم روشه چرا داستان رو کش میدید
توی اندروید وب سرویس مبتنی برا RESTful هست و با فرمت JSON ارسال میشه . شما کافیه Json رو یاد بگیری و با استفاده از کتابخانه ی volley در اندروید که توسط خود شرکت اندروید در اندروید 5 به بعد ارائه شده از api استفاده کنید
آموزش کار با کتابخانه ی volley برای ارتباطات سرور در اندروید اینجا هست (ویدیویی و فارسی ) (http://samenta.ir/%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-%DB%8C-volley-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF/)

Nevercom
جمعه 08 بهمن 1395, 19:20 عصر
دوست عزیز
API رابط برنامه نویسی هست فرقی نمیکنه چی باشه وب سرویس یه نوع API هست که مخصوص وب هست اسمشم روشه چرا داستان رو کش میدید
توی اندروید وب سرویس مبتنی برا RESTful هست و با فرمت JSON ارسال میشه . شما کافیه Json رو یاد بگیری و با استفاده از کتابخانه ی volley در اندروید که توسط خود شرکت اندروید در اندروید 5 به بعد ارائه شده از api استفاده کنید
آموزش کار با کتابخانه ی volley برای ارتباطات سرور در اندروید اینجا هست (ویدیویی و فارسی ) (http://samenta.ir/%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-%DB%8C-volley-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF/)
وقتی یکی می پرسه فرق Web Service و Web API چی هست، لابد میدونه که اینها از هم قابل تفکیک هستن.

در معنای عامش، هر خدمتی که در بستر وب ارائه بشه و با یه اینترفیسی به امکان استفاده داده بشه، رو میگن وب سرویس. اما چون ایشون هردو رو جداگانه مطرح کردن، فرض بر این هست که معنای خاص مدنظرشون هست.

اما این دو از بعد تخصصی معنای متفاوتی دارن، یعنی اگر مدیرت بیاد بگه واسه محصولمون یه وب سرویس بنویس، فرق داره تا اینکه بگه Web API بنویس.


توی اندروید وب سرویس مبتنی برا RESTful هست و با فرمت JSON ارسال میشه
وب سرویس رو برنامه نویس اندروید نمی نویسه و هیچوقت هم استانداردی تعیین نشده که برای اندروید باید حتماً اینها باید رعایت بشه.
وقتی نیاز هست که از یک وب سرویس استفاده بشه، کلاینت باید با استانداردهایی که خود وب سرویس تعیین می کنه اطلاعات رو ارسال/دریافت کنه. کلاینت میتونه اپ اندروید باشه، iOS, Desktop ویا وبسایت باشه.

ضمن اینکه حداقل تو ایران به دلیل نفوذ زیاد NET. خیلی از شرکت ها وب سرویس هاشون SOAP-based هست که زمین تا آسمون با یک وب ای پی آی RESTful و با فرمت JSON متفاوت هست.

rezaricky
شنبه 09 بهمن 1395, 11:56 صبح
دوست عزیز
API رابط برنامه نویسی هست فرقی نمیکنه چی باشه وب سرویس یه نوع API هست که مخصوص وب هست اسمشم روشه چرا داستان رو کش میدید
توی اندروید وب سرویس مبتنی برا RESTful هست و با فرمت JSON ارسال میشه . شما کافیه Json رو یاد بگیری و با استفاده از کتابخانه ی volley در اندروید که توسط خود شرکت اندروید در اندروید 5 به بعد ارائه شده از api استفاده کنید
آموزش کار با کتابخانه ی volley برای ارتباطات سرور در اندروید اینجا هست (ویدیویی و فارسی ) (http://samenta.ir/%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-%DB%8C-volley-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF/)
یعنی نمیشه مثلا restful نباشه و از xml استفاده کرد؟!

godofphp
یک شنبه 10 بهمن 1395, 19:36 عصر
وب سرویس رو برنامه نویس اندروید نمی نویسه و هیچوقت هم استانداردی تعیین نشده که برای اندروید باید حتماً اینها باید رعایت بشه.
وقتی نیاز هست که از یک وب سرویس استفاده بشه، کلاینت باید با استانداردهایی که خود وب سرویس تعیین می کنه اطلاعات رو ارسال/دریافت کنه. کلاینت میتونه اپ اندروید باشه، iOS, Desktop ویا وبسایت باشه.


این چیزی که شما گفتید مربوط به زمانی هست که Api بصورت عمومی عرضه بشه همانند api های اینستاگرام و .... که برنامه نویس ها بدون در نظر گرفتن پلتفرم یا زبان برنامه نویسی خودشون از اون استفاده کنند
بنده ی شیوه رسمی برای ارتباط بین کلاینت و سرور در برنامه نویسی اندروید رو عرض کردم وقتی که api قرار نیست در دسترس عموم باشه و فقط مختص یک کلاینت هست بهترین شیوه استفاده از RestFul در قالب JSON هست
ضمن اینکه پارس کردن باقی شیوه ها با کتابخانه ی رسمی اندروید به نام Volley امکان پذیر نیست یا حداقل توسط کتابخانه ها و کلاس های جانبی انجام میگیره
کلاس های اصلی کتابخانه ی volley به شکل های زیر هست
JsonArrayRequest
JsonObjectRequest و ...
در غیر این صورت باید api بصورت یک رشته ی نامفهوم دریافت شود و توسط کتابخانه ی های جانبی پارس شود که به نظر بنده وقتی سیستم از پایه نوشته بشه ارزش چنین کارهایی رو نداره
دو روش دیگری که بنده میشناسم soap و wsdl هستند که حداقل برای ارتباطات بین سرور و کلاینت اندرویدی مناسب نیستند بنده هم نگفتم نمیشه از اینها استفاده کرد بلکه گفتم شیوه ی رسمی و صحیح استفاده نیست و وقتی سیستمی قراره پیاده بشه با سیستم درستی پیاده شه
ولی اگه طبق گفته شما api عمومی باشه فرقی نداره با کدوم api باشه و این مورد اصلا دست برنامه نویس نیست و برنامه نویس مجبور به فهم و استفاده از آن هست

godofphp
یک شنبه 10 بهمن 1395, 19:44 عصر
یعنی نمیشه مثلا restful نباشه و از xml استفاده کرد؟!
منظورتون رو نفهمیدم
اگه مقایسه ای باشه باید بین XML و JSON باشه فکر کنم منظورتون همین بوده