Skip to content

mjmartin/rest-java-client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Pre-requisites

The following libraries are required to be downloaded:

java 6
apache httpclient 4.2.3
apache httpcore 4.2.2
apache httpmimi 4.2.3
java-json.jar

Version

1.0

Description

zuora-rest-java facilitates developers to build Java based
Zuora applications without being burdened by the underlying HTTP mechanics,
multi-threading, proxy, SSL security, error handling, and logging support 
required for debugging and troubleshooting. Complex JSON responses and call
arguments can also be manipulated using simple Java setter and getter methods.

The sample code demonstrates how all Zuora REST resources can be modeled
as "resource manager". There are 8 resource manager classes: Connection,
Catalog, Payment_Method, Account, Subscription, Transaction, Operation
and Usage. Three sample usage files are also provided.

Features

. Environment neutral. Support JSE or JEE

. Support configuration for local installation needs

. Provide full API pre-call and post-call trace for easy debugging

. Provide log files as support documentation

. Support multi-threading environment with http connection pooling

. Navigate call arguments and JSON response string using setter and getter

. Support VERIFY NONE and VERIFY PEER for SSL invocations

. Support proxy, including basic authentication

Configuration

Support global configuration via a configuration properties file in the
"resource" subdirectory. This can be customized and built into the target
jar file and used by the developers as the default configuration and
further simply code.

Different applications can also use different configuration. This is
achieved by including a local copy of a ZConfig.properties in the working
directory (i.e. pwd) where the application runs.

Change Installation specific properties as needed. Most default settings
work in most installations, but some are installation specific properties:

. Setting default tenant's credentials enables a connect call to be made
  without arguments - remove security sensitive information from developers.

. if using forwarding proxy server set proxy.used to true

. If the proxy uses basic authentication set proxy.auth to true, and its
  credentials in proxy.user and proxy.password.

. When developing switch on api trace for debugging. Set api.trace to true.

. If you are worried about the authenticity of the api end point
  set ssl.verify to true. This may slightly degrade performance on CONNECT
  calls.

Logging

SDK puts all log files in the subdirectory "sdk_logs" under the current
working directory where the application runs.

sdk.log is for the sdk itself.

api_trace.log is for API debugging.

When reporting an incident report to Zuora, both logs should be sent as
documentation.

Each log files has a 4M size limit and up to 3 generations before it is
wrapped around.

Examples

Refer to the samples for the following discussion. You
can write your own resource managers or any other abstraction; they are only
there to illustrate one way of designing application objects around the
APIs.

1. import the necessary jars

2. All calls must be routed through ZClient. To create a ZClient:

        ZClient zClient = new ZClient();

   Use the get, put, post, and delete methods to send a REST API.

3. Pass the zClient object to the resource manager object.

4. Prepare arguments

   All arguments are ultimately put inside a JSON structure. Some arguments,
   mandatory or optional, are required to be created in some nested structure.

   Use the ZAPIArgs class which allows argument object to be manipulated via
   its setter and getter methods. Whenever there is a need for a nested
   argument structure, use new ZAPIArgs. Refer to sample code and the
   corresponding published call arguments in the API documentation
   for more sample usage.

   There are 4 key attributes in ZAPIArgs that are needed to make a REST
   API call:

   uri
    Refers to the resource uri (excluding the API endpoint). For instance
        ZAPIArgs args =  new ZAPIArgs();
        args.set("uri", "/catalog/products");

    Predefined resource endpoints are provided as samples and can be found
    in ResourceEndpoints.java

   headers
    Used as fields in request header. Only relevant to the CONNECT API
        ZAPIArgs args =  new ZAPIArgs();
        args.set("headers", new ZAPIArgs());
        args.getArg("headers").set("apiAccessKeyId", "your_username");
        args.getArg("headers").set("apiSecretAccessKey", "password");

    If indded th ZConfig.properties file has the default tenant's credentials
    configured, these headers will not be needed when connecting to
    the default tenant.

   queryString
    Also known as HTTP parameters. For instance:

        ZAPIArgs args =  new ZAPIArgs();
        args.set("query_string", new ZAPIArgs());
        args.getArg("query_string").set("pageSize", 20);

   reqBody
    Most POST and PUT APIs require substantial amount of arguments to be set
    up in the request body of the HTTP request. This needs to be set up
    before the request can be sent to the service provider.

        ZAPIArgs args =  new ZAPIArgs();
        args.set("req_body", new ZAPIArgs());
        args.getArg("req_body").set("name", "api_tester");
        args.getArg("req_body").set("billToContact", new ZAPIArgs());
        args.getArg("req_body").getArg("billToContact").set("firstName", "api");
        args.getArg("req_body").getArg("billToContact").set("lastName", "Tester");

   Consult Zuora REST API documentation for details of the call arguments.

5. Authenticate to the endpoint using tenant's user id and password:

    connect()           # connect with pre-configured tenant's credentials
    
   To provide tenant's credentials on the fly:

    connect("box.net", "secretPassword")

6. Check response

   Both the HTTP Status Code and Response Phrase are always included
   in the response object ZAPIResp. If the invocation had been successful,
   ZAPIResp also contains the body of the HTTP response.

   The response attributes can be parsed using getter method. For
   instance:

        response.get("nextPage")

   To reach the response in a nested structure, use the getResp method.

   Refer to Zuora REST API documentation for details of the call arguments
   and the sample resource managers for more examples.

7. Catch exceptions

   If the syntax of the arguments are wrong, for example, missing body or
   presence of extraneous arguments, the SDK will raise an
   IllegalArgumentException with the corresponding diagnostic message.

   If there is an exception while the call is in progress, a RuntimeException
   will be raised, and the corresponding stack trace will also be
   logged in both the sdk and api_trace log files.

8. Follow the "nextPage"
   When issuing a GET call, sometimes there are multiple pages of response
   returned.

   This is indicated by the presence of the "nextPage" key in the response
   body.

   For example, in the get_all method of the PaymentMethod resource
   manager, if the nextPage key is present in the response, pass nextPage
   as the url and make a recursive call.

How To

1. To run the samples:
	
	mvn test
	
2. To import this maven project into Eclipse:
	
	mvn eclipse:eclipse

Author

Zuora Inc.

Copyright

Copyright (c) 2013 Zuora Inc. (http://www.zuora.com).
See License for details

About

Sample java client of Zuora REST API

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published