NAME
WWW::GoDaddy::REST - Work with services conforming to the GDAPI spec
SYNOPSIS
use WWW::GoDaddy::REST;
my $client = WWW::GoDaddy::REST->new({
url => 'https://example.com/v1',
basic_username => 'theuser',
basic_password => 'notsosecret'
});
# see docs for WWW::GoDaddy::REST::Resource for more info
my $auto = $client->query_by_id('autos',$vehicle_id_number);
print $auto->f('make'); # get a field
print $auto->f('model','S'); # set a field
$saved_auto = $auto->save();
my $resource = $auto->follow_link('link_name');
my $resource = $auto->do_action('drive', { lat => ..., lon => ...});
my $new = $client->create('autos', { 'make' => 'Tesla', 'model' => 'S' });
$auto->delete();
my @autos = $client->query('autos',{ 'make' => 'tesla' });
DESCRIPTION
This client makes it easy to code against a REST API that is created using the Go Daddy (r) API Specification (GDAPI) https://github.com/godaddy/gdapi.
You will typically only need three pieces of information: - base url of the api (this must include the version number) - username - password
SEARCHING AND FILTERS
There are two methods that deal with searching: query
and query_by_id
.
SEARCH BY ID
Example:
# GET /v1/how_the_schema_defines/the_resource/url/id
$resource = $client->query_by_id('the_schema','the_id');
# GET /v1/how_the_schema_defines/the_resource/url/id?other=param
$resource = $client->query_by_id('the_schema','the_id', { other => 'param' });
SEARCH WITH FILTER
Filters are hash references. The first level key is the field name that you are searching on. The value of the field is an array reference that has a list of hash references.
Full Syntax Example:
@items = $client->query( 'the_schema_name',
{
'your_field_name' => [
{
'modifier' => 'your modifier like "eq" or "ne"',
'value' => 'your search value'
},
{
#...
},
],
'another_field' => ...
}
);
Now there are shortcuts as well.
Single Field Equality Example:
@items = $client->query( 'the_schema_name',
{ 'your_field_name' => 'your search value' }
);
Assumed Equality Example:
@items = $client->query( 'the_schema_name',
{
'your_field_name' => [
{
# notice the missing 'modifier' key
'value' => 'your search value',
}
],
'another_field' => 'equality search too'
}
);
Pass Through to query_by_id VS Search
$resource = $client->query( 'the_schema_name', 'id' );
ATTRIBUTES
Attributes can be provided in the new
method and have corresponding methods to get/set the values.
- url
-
Base URL for the web service. This must include the version portion of the URL as well.
Trailing slash can be present or left out.
Example:
$c = WWW::GoDaddy::REST->new( { url => 'https://example.com/v1' } );
- basic_username
-
The username or key you were assigned for the web service.
Example:
$c = WWW::GoDaddy::REST->new( { url => '...', basic_username => 'me', basic_password => '...' } );
NOTE: not all web services authenticate using HTTP Basic Auth. In this case, you will need to provide your own
user_agent
with default headers to accomplish authentication on your own. - basic_password
-
The password or secret you were assigned for the web service.
Example:
$c = WWW::GoDaddy::REST->new( { url => '...', basic_username => '...', basic_password => 'very_secret' } );
NOTE: not all web services authenticate using HTTP Basic Auth. In this case, you will need to provide your own
user_agent
with default headers to accomplish authentication on your own. - user_agent
-
The instance of LWP::UserAgent that is used for all HTTP(S) interraction.
This has a sane default if you do not provide an instance yourself.
You may override this if you wish in the constructor or later on at runtime.
See the
default_user_agent
in "CLASS METHODS".Example:
$ua = LWP::UserAgent->new(); $ua->default_headers->push_header( 'Authorization' => 'MyCustom ASDFDAFFASFASFSAFSDFAS==' ); $c = WWW::GoDaddy::REST->new({ url => '...', user_agent => $ua });
- schemas_file
-
Optional path to a file containing the JSON for all of the schemas for this web service (from the schemas collection). If you would like to avoid a round trip to the server at runtime, this is the way to do it.
Example:
$c = WWW::GoDaddy::REST->new({ url => '...', schemas_file => '/my/app/schema.json' });
See the GDAPI Specification for more information about schemas and collections. https://github.com/godaddy/gdapi/blob/master/specification.md
- raise_http_errors
-
Boolean value that indicates whether a
die()
will occur in the event of a non successful HTTP response (4xx 5xx etc).It defaults to True. Set to a false value if you wish to check the HTTP response code in the resultant resource on your own.
METHODS
- query
-
Search for a list of resources given a schema name and a filter.
If the second parameter is a scalar, is assumes you are not searching but rather trying to load a specific resource.
See the documentation for
query_by_id
.In scalar context, this returns a Collection object.
In list context, this returns a list of Resource objects (or subclasses).
Example:
@items = $client->query('schema_name',{ 'field' => 'value' }); $collection = $client->query('schema_name',{ 'field' => 'value' }); $item = $client->query('schema_name','1234'); $item = $client->query('schema_name','1234',{ 'field' => 'value' }); $item = $client->query('schema_name','1234',undef,{ timeout => 15 });
See "SEARCHING AND FILTERS" for more information.
- query_by_id
-
Search for a single instance of a resource by its primary id. Optionally specify a hash for additional query params to append to the resource URL.
This returns a Resource (or a subclass).
Example:
# GET /v1/how_the_schema_defines/the_resource/url/the_id $resource = $client->query_by_id('the_schema','the_id'); $resource = $client->query_by_id('the_schema','the_id',undef,{ timeout => 15 }); # GET /v1/how_the_schema_defines/the_resource/url/the_id?other=param $resource = $client->query_by_id('the_schema','the_id', { other => 'param' }); $resource = $client->query_by_id('the_schema','the_id', { other => 'param' }, { timeout => 15 });
- create
-
Given a schema and a resource (or hashref), a POST will be made against the collection url of the schema to create the resource.
This returns a WWW::GoDaddy::REST::Resource (or a subclass).
Example:
$car = $client->create('autos', { 'make' => 'Tesla', 'model' => 'S' }); $car = $client->create('autos', { 'make' => 'Tesla', 'model' => 'S' }, { timeout => 30 });
- schema
-
Given a schema name, return a WWW::GoDaddy::REST::Schema object or undef if it is not found.
Example:
$schema_resource = $client->schema('the_schema');
- schemas_url
-
If no schema name is provided, return the schema collection url where you can retrieve the collection of all schemas.
If a schema name is provided, return the URL where you can retrieve the schema with the given name.
Example:
$c = WWW::GoDaddy::REST->new({url => 'http://example.com/v1/'}); $c->schemas_url(); # http://example.com/v1/schemas/ $c->schemas_url('error'); # http://example.com/v1/schemas/error
- http_request
-
Perform the HTTP request and return a hashref of the decoded JSON response.
If this is called in list context, it returns the decoded JSON response and the associated HTTP::Response object.
This takes the following parameters (similar but not the same as HTTP::Request): - HTTP method - URL relative to the web service base
url
- Optional hashref of data to send as JSON contentThe url provided will be rooted to the base url,
url
.Example:
$c = WWW::GoDaddy::REST->new({ url => 'http://example.com/v1/' }); # GET http://example.com/v1/servers/Asdf $data_hashref = $c->http_request('GET','/servers/Asdf') ($hash,$http_response) = $c->http_request('GET','/servers/Asdf');
- http_request_as_resource
-
Perform the HTTP request and return a WWW::GoDaddy::REST::Resource instance.
This takes the following parameters (similar but not the same as HTTP::Request): - HTTP method - URL relative to the web service base
url
- Optional hashref of data to send as JSON contentThe url provided will be rooted to the base url,
url
.The url provided will be rooted to the base url,
url
.Example:
$c = WWW::GoDaddy::REST->new({ url => 'http://example.com/v1/' }); # GET http://example.com/v1/servers/Asdf $resource = $c->http_request_as_resource('GET','/servers/Asdf')
- http_request_schemas_json
-
Retrieve the JSON string for the schemas collection.
Example:
$c = WWW::GoDaddy::REST->new({ url => 'http://example.com/v1/' }); $schemas_json = $c->http_request_schemas_json(); # write this out to a file for later use # with the 'schemas_file' parameter for example
- build_http_request
-
Given parameters for a HTTP::Request object, return an instance of this object with certain defaults filled in.
As of this writing the defaults filled in are:
- HTTP basic auth headers if auth is provided
Unlike other methods such as
http_request
, theurl
is not rooted to the base url.Example:
$c = WWW::GoDaddy::REST->new({ url => 'http://example.com/v1/' }); $request = $c->build_http_request('GET','http://example.com/v1/test');
CLASS METHODS
- default_user_agent
-
Generate a default LWP::UserAgent. See
user_agent
.Example:
$ua = WWW::GoDaddy::REST->default_user_agent(); $ua->default_headers->push('X-Custom' => 'thing'); $c = WWW::GoDaddy::REST->new({ user_agent => $ua, url => '...' });
SEE ALSO
gdapi-shell
command line program.
AUTHOR
David Bartle, <davidb@mediatemple.net>
COPYRIGHT & LICENSE
Copyright (c) 2014 Go Daddy Operating Company, LLC
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.