Overview
- WebProxy is PHP library that offers consistent interface for communicating with standard third-party web services, be it API or an ordinary website.
- It offers parsing JSON response from REST API, scrapping and crawling HTML code from website, or calling methods on SOAP services.
- To clarify certain potential misconceptions, please see terminology chapter below.
Included libraries / dependencies
- For HTTP:
guzzlehttp/guzzle
| http://docs.guzzlephp.org/en/stable/ - For HTML crawling:
symfony/dom-crawler
| https://symfony.com/doc/current/components/dom_crawler.html - For SOAP: native
SoapClient
| https://secure.php.net/manual/en/class.soapclient.php
Usage
Examples
- For implemented examples, see
demo
folder.
General guide
- Create Service class that extends suitable child
- Options are:
-
RestApi
(for REST APIs) -
Website
(for crawling trough Websites) -
SoapService
(for SOAP APIs)
-
- Fill in the missing interface methods
-
getUri()
: return base URI where service is located.- For
HttpService
it's base URI. E.q.return 'https://jsonplaceholder.typicode.com';
- For
SoapService
it's WSDL URI. E.q.return 'https://soapexample.com?wsdl';
- For
-
- Options are:
- Create Endpoint classes that extends children appropriate to selected Service type
- Options are:
-
RestResource
(forRestApi
) -
Webpage
(for crawling troughWebsite
) -
SoapEndpoint
(forSoapService
)
-
- Fill in the missing interface methods, and optional class variables
-
getServiceClass()
: Return class of appropriate service. E.q.return JsonPlaceholderRestApi::class;
-
getRequestName()
: Return specification of request that the endpoint performs.- For
HttpService
, it's URI appendend after base Service URI. E.q.return '/posts';
- For
SoapService
, it's method name. E.q.return 'getPosts';
- For
-
$supportedMethods
: Optional whitelist for HttpServices. E.q.return [Method::POST];
-
- Write methods to filter the results
- For
RestResource
, utilize parsed data object:return $this->getResponseData()['id'];
- For
Websites
, utilize Symfony DOM Crawler:return $this->getCrawler()->filter('.address h3')->text();
- For
SoapEndpoints
, utilize parsed data:return $this->getResponseData()['result'];
- For
- Options are:
- Initialize
WebProxy
object (new WebProxy()
) and desired endpoints (new ExampleResource()
) - Pass new instance of the custom endpoint to
WebProxy
trough one of its methods-
get
,post
,put
,delete
as shorthands for HTTP Requests -
httpRequest
for customized HTTP Requests -
call
as shorthand for SOAP request -
soapRequest
for customized SOAP Requests
-
- for specific purposes, you might want to use
httpRequest
andsoapRequest
methods with customRequest
object- For example, default POST body type is Form-data, or Multipart (if files are sent with it). To send JSON, use
Request::create(Method::POST)->withJsonBody(['array','content])
- pass instance of the
Request
as second parameter to mentioned methods
- For example, default POST body type is Form-data, or Multipart (if files are sent with it). To send JSON, use
- Use returned modified instance of endpoint to return parsed data
Terminology used
-
Client
: A class that is responsible for performing request onEndpoint
located onService
, and fetching the response body-
HttpClient
: Contains single Guzzle instance to perform all requests -
SoapClient
: Passes requests to every independentSoapService
's own instance of nativeSoapClient
-
-
Service
: A collection of endpoints located on single domain.-
HttpService
: Service acessible trough HTTP requests-
RestApi
: REST API containing multipleRestResource
s -
Website
: Site containg multipleWebpage
s
-
-
SoapService
: Service accessible trough SOAP calls
-
-
Endpoint
: One specific function ofService
-
HttpEndpoint
: Specific URI onHttpService
-
RestResource
: RESTfulHttpEndpoint
-
Webpage
:HttpEndpoint
that returns HTML
-
-
SoapEndpoint
: A method ofSoapService
-