public class Resty extends Object
 import static us.monoid.web.Resty.*;
 
 GETting an URL (as JSON):
 new Resty().json(url);
 
 
 POSTing to an URL (using multipart/form-data) and expecting JSON back:
 
 
 new Resty().json(url, form(data("name", "Don Draper"), data("occupation", "Ad Man")));
 
 
 PUTting content and expecting JSON back:
 
 
 
 new Resty().json(url, put(content(someJSON)));
 
 
 
 DELETE a resource via URL expecting JSON back:
 
 
 new Resty().json(url, delete());
 
 
 
 Here is an example on how to use the geonames web service. It retrieves the
 json object (see json.org for details) and gets the name of a place from the
 zip code:
 
 
 
        Resty r = new Resty();
        Object name = r.json("http://ws.geonames.org/postalCodeLookupJSON?postalcode=66780&country=DE").get("postalcodes[0].placeName");
        assertEquals(name, "Rehlingen-Siersburg");
 
 
 
 The return value is a resource with the data you requested AND a new Resty
 instance with the same set of options you initialized Resty with.
 
 
 Resty supports complex path queries to navigate into a json object. This is
 mainly used for extracting URIs to surf along a series of REST resources for
 web services following the HATEOS paradigm.
 
 Resty objects are not re-entrant.
 
 You can also specify options when creating a Resty instance. Well, currently
 there is one option to set the timeout for connections. But you can also
 create your own options! See Resty.Option for more info.| Modifier and Type | Class and Description | 
|---|---|
| static class  | Resty.OptionBase class for Resty options. | 
| static class  | Resty.TimeoutOption to set a timeout. | 
| Modifier and Type | Field and Description | 
|---|---|
| protected static String | DEFAULT_USER_AGENT | 
| protected static String | MOZILLA | 
| protected String | userAgent | 
| Constructor and Description | 
|---|
| Resty(Resty.Option... someOptions)Create an instance of Resty with the following list of options. | 
| Modifier and Type | Method and Description | 
|---|---|
| protected void | addAdditionalHeaders(URLConnection con)Add all headers that have been set with the alwaysSend call. | 
| protected <T extends AbstractResource> | addStandardHeaders(URLConnection con,
                  T resource)Add all standard headers (User-Agent, Accept) to the URLConnection. | 
| BinaryResource | bytes(String anUri)Get the resource specified by the uri and return a binary resource for
 it. | 
| BinaryResource | bytes(String anUri,
     AbstractContent someContent)POST to the URI and get the resource as binary resource. | 
| BinaryResource | bytes(URI anUri)Get the resource specified by the uri and return a binary resource for
 it. | 
| BinaryResource | bytes(URI anUri,
     AbstractContent someContent)POST to the URI and get the resource as binary resource. | 
| static ChunkedContent | chunked(String mime,
       InputStream stream)Create chunked data | 
| static ChunkedContent | chunked(String mime,
       InputStream stream,
       int chunkSize)Create chunked data | 
| static Content | content(byte[] bytes)Create a content object from a byte array. | 
| static Content | content(JSONArray someJson)Create a content object from a JSON array. | 
| static Content | content(JSONObject someJson)Create a content object from a JSON object. | 
| static Content | content(String somePlainText)Create a content object from plain text. | 
| protected BinaryResource | createBinaryResource() | 
| protected JSONResource | createJSONResource() | 
| protected TextResource | createTextResource() | 
| static FormData | data(String name,
    AbstractContent content)Create a form data entry for a multipart form with any kind of content
 type. | 
| static FormData | data(String name,
    String plainTextValue)Create a plain/text form data entry for a multipart form. | 
| static AbstractContent | delete()Tell Resty to delete the URL content on the server, resulting in a
 DELETE. | 
| protected <T extends AbstractResource> | doGET(URI anUri,
     T resource) | 
| void | dontSend(String aHeader)Don't send a header that was formely added in the alwaysSend method. | 
| protected <T extends AbstractResource> | doPOSTOrPUT(URI anUri,
           AbstractContent requestContent,
           T resource) | 
| protected <T extends AbstractResource> | fillResourceFromURL(URLConnection con,
                   T resource)Get the content from the URLConnection, create a Resource representing
 the content and carry over some metadata like HTTP Result and location
 header. | 
| static MultipartContent | form(FormData... formData)Create form content to be sent as multipart/form-data. | 
| static FormContent | form(String query)Create form content as application/x-www-form-urlencoded (i.e. | 
| protected Map<String,String> | getAdditionalHeaders() | 
| Resty | identifyAsMozilla()Sets the User-Agent to identify as Mozilla/Firefox. | 
| Resty | identifyAsResty()Sets the User-Agent to Resty. | 
| JSONResource | json(String string)GET a URI given by string and parse the result as JSON. | 
| JSONResource | json(String anUri,
    AbstractContent content) | 
| JSONResource | json(URI anUri)GET a URI and parse the result as JSON. | 
| JSONResource | json(URI anUri,
    AbstractContent requestContent)POST to a URI and parse the result as JSON | 
| protected <T extends AbstractResource> | openConnection(URI anUri,
              T resource) | 
| static JSONPathQuery | path(String string)Create a JSONPathQuery to extract data from a JSON object. | 
| static AbstractContent | put(Content someContent)Tell Resty to replace the specified content on the server, resulting in a
 PUT operation instead of a POST operation. | 
| Resty | setOptions(Resty.Option... someOptions)Set options if you missed your opportunity in the c'tor or if you want to
 change the options. | 
| TextResource | text(String anUri)Get a plain text resource for the specified URI. | 
| TextResource | text(String anUri,
    AbstractContent content)Get a plain text resource for the specified URI by POSTing to it. | 
| TextResource | text(URI anUri)Get a plain text resource for the specified URI. | 
| TextResource | text(URI anUri,
    AbstractContent content)Get a plain text resource for the specified URI by POSTing to it. | 
| void | withHeader(String aHeader,
          String aValue)Tell Resty to send the specified header with each request done on this
 instance. | 
protected static String DEFAULT_USER_AGENT
protected static String MOZILLA
protected String userAgent
public Resty(Resty.Option... someOptions)
setOptions(Option...) to change
 options afterwards.protected void addAdditionalHeaders(URLConnection con)
protected <T extends AbstractResource> void addStandardHeaders(URLConnection con, T resource)
public BinaryResource bytes(String anUri) throws IOException
anUri - the uri to followIOExceptionpublic BinaryResource bytes(String anUri, AbstractContent someContent) throws IOException
anUri - the uri to followIOExceptionpublic BinaryResource bytes(URI anUri) throws IOException
anUri - the uri to followIOExceptionpublic BinaryResource bytes(URI anUri, AbstractContent someContent) throws IOException
anUri - the uri to followIOExceptionpublic static ChunkedContent chunked(String mime, InputStream stream)
mime - mime typestream - stream to read content frompublic static ChunkedContent chunked(String mime, InputStream stream, int chunkSize)
mime - the mimestream - the streamchunkSize - the chunk size used to configure HttpURLConnection
            streaming modepublic static Content content(byte[] bytes)
bytes - the bytes to sendpublic static Content content(JSONArray someJson)
someJson - the JSON array to usepublic static Content content(JSONObject someJson)
someJson - the JSON object to usepublic static Content content(String somePlainText)
somePlainText - the plain text to sendprotected BinaryResource createBinaryResource()
protected JSONResource createJSONResource()
protected TextResource createTextResource()
public static FormData data(String name, AbstractContent content)
name - the name of the control or variable in a formcontent - the content to sendpublic static FormData data(String name, String plainTextValue)
name - the name of the control of the formplainTextValue - the plain text valuepublic static AbstractContent delete()
protected <T extends AbstractResource> T doGET(URI anUri, T resource) throws IOException
IOExceptionpublic void dontSend(String aHeader)
aHeader - the header to removeprotected <T extends AbstractResource> T doPOSTOrPUT(URI anUri, AbstractContent requestContent, T resource) throws IOException
IOExceptionprotected <T extends AbstractResource> T fillResourceFromURL(URLConnection con, T resource) throws IOException
<T extends AbstractResource> the resource that
 will be created and filled.con - the URLConnection used to get the dataresource - the resource class to instantiateIOExceptionpublic static MultipartContent form(FormData... formData)
public static FormContent form(String query)
query - the preformatted, properly encoded form datapublic Resty identifyAsMozilla()
public Resty identifyAsResty()
public JSONResource json(String string) throws IOException
string - - the string to use as URIIOExceptionfor more docspublic JSONResource json(String anUri, AbstractContent content) throws IOException
IOExceptionjson(URI, AbstractContent)public JSONResource json(URI anUri) throws IOException
anUri - the URI to requestIOExceptionpublic JSONResource json(URI anUri, AbstractContent requestContent) throws IOException
anUri - the URI to visitrequestContent - the content to POST to the URIIOException - if uri is wrong or no connection could be made or for 10
             zillion other reasonsprotected <T extends AbstractResource> URLConnection openConnection(URI anUri, T resource) throws IOException, MalformedURLException
IOExceptionMalformedURLExceptionpublic static JSONPathQuery path(String string)
 Resty r = new Resty();
 r.json(someUrl).json(path("path.to.url.in.json"));
 
 string - public static AbstractContent put(Content someContent)
public Resty setOptions(Resty.Option... someOptions)
someOptions - new set of optionspublic TextResource text(String anUri) throws IOException
anUri - the URI to followIOException - if content type sent is not a plain text, if the connection
             could not be made and gazillion other reasonspublic TextResource text(String anUri, AbstractContent content) throws IOException
anUri - the URI to followIOException - if content type sent is not a plain text, if the connection
             could not be made and gazillion other reasonspublic TextResource text(URI anUri) throws IOException
anUri - the URI to followIOException - if content type sent is not a plain text, if the connection
             could not be made and gazillion other reasonspublic TextResource text(URI anUri, AbstractContent content) throws IOException
anUri - the URI to followIOException - if content type sent is not a plain text, if the connection
             could not be made and gazillion other reasonspublic void withHeader(String aHeader, String aValue)
aHeader - the header to sendaValue - the value