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' }); 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'); # GET /v1/how_the_schema_defines/the_resource/url/the_id?other=param $resource = $client->query_by_id('the_schema','the_id', { other => 'param' }); 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' }); 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 content 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 $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 content The 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', the `url' 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, `' 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.