NAME

WebService::GoogleAPI::Client::Discovery - Google API discovery service

VERSION

version 0.27

MORE INFORMATION

https://developers.google.com/discovery/v1/reference/

SEE ALSO

Not using Swagger but it is interesting - https://github.com/APIs-guru/openapi-directory/tree/master/APIs/googleapis.com for Swagger Specs.

WebService::GoogleAPI::Client - contains code for parsing discovery structures

includes a chi property that is an instance of CHI using File Driver to cache discovery resources for 30 days

say $client-dicovery->chi->root_dir(); ## provides full file path to temp storage location used for caching

METHODS

get_with_cache

my $hashref = $disco->get_with_cache($url, $force, $authenticate)

Retrieves the given API URL, retrieving and caching the returned JSON. If it gets a 403 Unauthenticated error, then it will try again using the credentials that are save on this instances 'ua'.

If passed a truthy value for $force, then will not use the cache. If passed a truthy value for $authenticate, then will make the request with credentials.

discover_all

my $hashref = $disco->discover_all($force, $authenticate)

Return details about all Available Google APIs as provided by Google or in CHI Cache. Does the fetching with get_with_cache, and arguments are as above.

On Success: Returns HASHREF with keys discoveryVersion,items,kind On Failure: dies a horrible death. You probably don't want to continue in that case.

SEE ALSO: available_APIs, list_of_available_google_api_ids

available_APIs

Return hashref keyed on api name, with arrays of versions, links to documentation, and links to the url for that version's API document.

{
  youtube => {
    version           => [ 'v3', ... ]
    documentationLink => [ ...,  ... ] ,
    discoveryRestUrl  => [ ...,  ... ] ,
  },
  gmail => {
    ...
  } 
}

Used internally to pull relevant discovery documents.

augment_with

Allows you to augment the cached stored version of the discovery structure

$augmented_document = $disco->augment_with({
  'version'   => 'v4',
  'preferred' => 1,
  'title'     => 'Google My Business API',
  'description' => 'The Google My Business API provides an interface for managing business location information on Google.',
  'id'                => 'mybusiness:v4',
  'kind'              => 'discovery#directoryItem',
  'documentationLink' => "https://developers.google.com/my-business/",
  'icons'             => {
    "x16" => "http://www.google.com/images/icons/product/search-16.gif",
    "x32" => "http://www.google.com/images/icons/product/search-32.gif"
  },
  'discoveryRestUrl' => 'https://developers.google.com/my-business/samples/mybusiness_google_rest_v4p2.json',
  'name' => 'mybusiness'
});

This can also be used to overwrite the cached structure.

Can also be called as augment_discover_all_with_unlisted_experimental_api, which is being deprecated for being plain old too long.

service_exists

Return 1 if Google Service API ID is described by Google API discovery. Otherwise return 0

print $disco->service_exists('calendar');  # 1
print $disco->service_exists('someapi');  # 0

Note that most Google APIs are fully lowercase, but some are camelCase. Please check the documentation from Google for reference.

available_versions

Show available versions of particular API described by api id passed as parameter such as 'gmail'

$disco->available_versions('calendar');  # ['v3']
$disco->available_versions('youtubeAnalytics');  # ['v1','v1beta1']

Returns arrayref

latest_stable_version

return latest stable verion of API

$d->available_versions('calendar');  # ['v3']
$d->latest_stable_version('calendar');  # 'v3'

$d->available_versions('tagmanager');  # ['v1','v2']
$d->latest_stable_version('tagmanager');  # ['v2']

$d->available_versions('storage');  # ['v1','v1beta1', 'v1beta2']
$d->latest_stable_version('storage');  # ['v1']

process_api_version

my $hashref = $disco->process_api_version('gmail')   
   # { api => 'gmail', version => 'v1' }
my $hashref = $disco->process_api_version({ api => 'gmail' })   
   # { api => 'gmail', version => 'v1' }
my $hashref = $disco->process_api_version('gmail:v2') 
   # { api => 'gmail', version 'v2' }

Takes a version string and breaks it into a hashref. If no version is given, then default to the latest stable version in the discover document.

get_api_document

returns the cached version if avaiable in CHI otherwise retrieves discovery data via HTTP, stores in CHI cache and returns as a Perl data structure.

my $hashref = $self->get_api_document( 'gmail' );
my $hashref = $self->get_api_document( 'gmail:v3' );
my $hashref = $self->get_api_document( 'gmail:v3.users.list' );
my $hashref = $self->get_api_document( { api=> 'gmail', version => 'v3' } );

NB: if deeper structure than the api_id is provided then only the head is used so get_api_document( 'gmail' ) is the same as get_api_document( 'gmail.some.child.method' ) returns the api discovery specification structure ( cached by CHI ) for api id (eg 'gmail') returns the discovery data as a hashref, an empty hashref on certain failing conditions or croaks on critical errors.

Also available as get_api_discovery_for_api_id, which is being deprecated.

get_method_details

$disco->get_method_details($tree, $api_version)

returns a hashref representing the discovery specification for the method identified by $tree in dotted API format such as texttospeech.text.synthesize

Dies a horrible death if not found.

Also available as extract_method_discovery_detail_from_api_spec, but the long name is being deprecated in favor of the more compact one.

methods_available_for_google_api_id

Returns a hashref keyed on the Google service API Endpoint in dotted format. The hashed content contains a structure representing the corresponding discovery specification for that method ( API Endpoint )

methods_available_for_google_api_id('gmail.users.settings.delegates.get');

methods_available_for_google_api_id('gmail.users.settings.delegates.get', 'v1');

list_api_ids

Returns an array list of all the available API's described in the API Discovery Resource that is either fetched or cached in CHI locally for 30 days.

my $r = $agent->list_api_ids();
print "List of API Services ( comma separated): $r\n";

my @list = $agent->list_api_ids();

Formerly was list_of_available_google_api_ids, which will now give a deprecation warning to switch to list_api_ids.

AUTHOR

Veesh Goldman <veesh@cpan.org>

COPYRIGHT AND LICENSE

This software is Copyright (c) 2017-2023 by Veesh Goldman and Others.

This is free software, licensed under:

The Apache License, Version 2.0, January 2004