package com.asana.resources.gen;
import com.asana.Client;
import com.asana.resources.Resource;
import com.asana.models.Webhook;
import com.asana.requests.ItemRequest;
import com.asana.requests.CollectionRequest;
/**
* Webhooks allow an application to be notified of changes. This is in addition
* to the ability to fetch those changes directly as
* [Events](/developers/api-reference/events) - in fact, Webhooks are just a way
* to receive Events via HTTP POST at the time they occur instead of polling for
* them. For services accessible via HTTP this is often vastly more convenient,
* and if events are not too frequent can be significantly more efficient.
*
* In both cases, however, changes are represented as Event objects - refer to
* the [Events documentation](/developers/api-reference/events) for more
* information on what data these events contain.
*
* **NOTE:** While Webhooks send arrays of Event objects to their target, the
* Event objects themselves contain *only IDs*, rather than the actual resource
* they are referencing. So while a normal event you receive via GET /events
* would look like this:
*
* {\
* "resource": {\
* "id": 1337,\
* "name": "My Task"\
* },\
* "parent": null,\
* "created_at": "2013-08-21T18:20:37.972Z",\
* "user": {\
* "id": 1123,\
* "name": "Tom Bizarro"\
* },\
* "action": "changed",\
* "type": "task"\
* }
*
* In a Webhook payload you would instead receive this:
*
* {\
* "resource": 1337,\
* "parent": null,\
* "created_at": "2013-08-21T18:20:37.972Z",\
* "user": 1123,\
* "action": "changed",\
* "type": "task"\
* }
*
* Webhooks themselves contain only the information necessary to deliver the
* events to the desired target as they are generated.
*/
public class WebhooksBase extends Resource {
/**
* @param client Parent client instance
*/
public WebhooksBase(Client client) {
super(client);
}
/**
* Establishing a webhook is a two-part process. First, a simple HTTP POST
* similar to any other resource creation. Since you could have multiple
* webhooks we recommend specifying a unique local id for each target.
*
* Next comes the confirmation handshake. When a webhook is created, we will
* send a test POST to the `target` with an `X-Hook-Secret` header as
* described in the
* [Resthooks Security documentation](http://resthooks.org/docs/security/).
* The target must respond with a `200 OK` and a matching `X-Hook-Secret`
* header to confirm that this webhook subscription is indeed expected.
*
* If you do not acknowledge the webhook's confirmation handshake it will
* fail to setup, and you will receive an error in response to your attempt
* to create it. This means you need to be able to receive and complete the
* webhook *while* the POST request is in-flight.
*
* @return Request object
*/
public ItemRequest<Webhook> create() {
return new ItemRequest<Webhook>(this, Webhook.class, "/webhooks", "POST");
}
/**
* Returns the compact representation of all webhooks your app has
* registered for the authenticated user in the given workspace.
*
* @return Request object
*/
public CollectionRequest<Webhook> getAll() {
return new CollectionRequest<Webhook>(this, Webhook.class, "/webhooks", "GET");
}
/**
* Returns the full record for the given webhook.
*
* @param webhook The webhook to get.
* @return Request object
*/
public ItemRequest<Webhook> getById(String webhook) {
String path = String.format("/webhooks/%s", webhook);
return new ItemRequest<Webhook>(this, Webhook.class, path, "GET");
}
/**
* This method permanently removes a webhook. Note that it may be possible
* to receive a request that was already in flight after deleting the
* webhook, but no further requests will be issued.
*
* @param webhook The webhook to delete.
* @return Request object
*/
public ItemRequest<Webhook> deleteById(String webhook) {
String path = String.format("/webhooks/%s", webhook);
return new ItemRequest<Webhook>(this, Webhook.class, path, "DELETE");
}
}