|
@@ -0,0 +1,79 @@
|
|
|
|
+This package offers support for the Google REST APIs.
|
|
|
|
+
|
|
|
|
+Each Google Service API is a REST API that offers multiple resources.
|
|
|
|
+
|
|
|
|
+All Google Service APIs are described in the Google Discovery service:
|
|
|
|
+https://developers.google.com/discovery/
|
|
|
|
+The Google APIS use JSON, JSON-Schema and OAuth2 to do their work.
|
|
|
|
+
|
|
|
|
+These services can be converted to a object pascal implementation with the
|
|
|
|
+googleapiconv program (see directory examples/generator)
|
|
|
|
+
|
|
|
|
+It will fetch the JSON describing a REST API from the Google discovery server:
|
|
|
|
+
|
|
|
|
+googleapiconv -s calendar/v3 -o calendar.pp
|
|
|
|
+
|
|
|
|
+It can also download the rest description through an URL:
|
|
|
|
+
|
|
|
|
+http://www.googleapis.com/discovery/v1/apis/calendar/v3/rest -o calendar.pp
|
|
|
|
+
|
|
|
|
+It can also use downloaded versions of the JSON files.
|
|
|
|
+
|
|
|
|
+The program has many options, running it without options gives an overview.
|
|
|
|
+
|
|
|
|
+A Google API breaks down in 4 parts, all of which have a base class in the
|
|
|
|
+following units:
|
|
|
|
+
|
|
|
|
+TGoogleClient - unit googleclient
|
|
|
|
+---------------------------------
|
|
|
|
+
|
|
|
|
+This is a simple component that handles the transport and authorization,
|
|
|
|
+it needs a TFPWebClient descendent (such as TFPHTTPWebClient) and a
|
|
|
|
+TFPOauth2Handler descendent to communicate with Google servers.
|
|
|
|
+These 2 classes are part of fcl-web, a synapse-based TFPWebclient descendant is
|
|
|
|
+available separately.
|
|
|
|
+
|
|
|
|
+TGoogleAPI - unit googleservice
|
|
|
|
+-------------------------------
|
|
|
|
+
|
|
|
|
+There is a descendent of this component for each Google service API, which
|
|
|
|
+handles all calls to the service. It uses a TGoogleClient component to handle
|
|
|
|
+actual communication.
|
|
|
|
+
|
|
|
|
+This class contains a method called ServiceCall which is used by all
|
|
|
|
+resources in the API to execute service requests. It will use the client to
|
|
|
|
+do the actual HTTP request.
|
|
|
|
+
|
|
|
|
+Each unit google*.pp in this package contains a single component that
|
|
|
|
+descends from the TGoogleAPI component.
|
|
|
|
+
|
|
|
|
+TGoogleResource - unit googleservice
|
|
|
|
+------------------------------------
|
|
|
|
+
|
|
|
|
+For each resource exposed by the service, a descendent of this class is generated
|
|
|
|
+that has all the methods for that resource, as described in the REST service description.
|
|
|
|
+
|
|
|
|
+TGoogleResource uses an instance of the TGoogleAPI class to handle all calls to
|
|
|
|
+the service.
|
|
|
|
+
|
|
|
|
+Each API unit google*.pp in this package contains one or more TGoogleResource
|
|
|
|
+descendents, used in the API of that unit.
|
|
|
|
+
|
|
|
|
+TGoogleBaseObject - unit googlebase
|
|
|
|
+-----------------------------------
|
|
|
|
+
|
|
|
|
+For each data type used in the API, a descendent of this class is used: it is a
|
|
|
|
+descendent of TBaseObject (unit restbase, part of fcl-web) and handles
|
|
|
|
+loading from and saving to JSON.
|
|
|
|
+
|
|
|
|
+Unit googlediscoverytopas
|
|
|
|
+-------------------------
|
|
|
|
+
|
|
|
|
+This unit contains the code to convert a Google REST API description to a
|
|
|
|
+object pascal unit.
|
|
|
|
+
|
|
|
|
+Authentication happens using OAuth2, the units for this are available in the
|
|
|
|
+fcl-web package (fpjwt, fpoauth2, fpoauth2ini).
|
|
|
|
+
|
|
|
|
+Example programs for Lazarus will be published separately.
|
|
|
|
+
|