NAME
    Apigee::Edge - Apigee.com 'Edge' management API.

SYNOPSIS
      use Apigee::Edge;

      my $apigee = Apigee::Edge->new(
        org => 'apigee_org',
        usr => 'your_email',
        pwd => 'your_password'
      );

DESCRIPTION
    Apigee::Edge is an object-oriented interface to facilitate management of
    Developers and Apps using the Apigee.com 'Edge' management API. see
    <http://apigee.com/docs/api-services/content/api-reference-getting-start
    ed>

    The API is incompleted. welcome to fork the repos on github
    <https://github.com/binary-com/perl-Apigee-Edge> and send us
    pull-requests.

METHODS
  new
    *   org

        required. organization name.

    *   usr

        required. login email

    *   pwd

        required. login password

    *   endpoint

        optional. default to https://api.enterprise.apigee.com/v1

  Apps
    <http://apigee.com/docs/api/apps-0>

   get_app
        my $app = $apigee->get_app($app_id);

   get_apps
        my $app_ids = $apigee->get_apps();
        my $apps = $apigee->get_apps(expand => 'true', includeCred => 'true');

   get_apps_by_family
        my $app_ids = $apigee->get_apps_by_family($family);

   get_apps_by_keystatus
        my $app_ids = $apigee->get_apps_by_keystatus($keystatus);

   get_apps_by_type
        my $app_ids = $apigee->get_apps_by_type($type);

  Developers
    <http://apigee.com/docs/api/developers-0>

   get_developers
        my $developers = $apigee->get_developers();

   get_app_developers
        my $developers = $apigee->get_app_developers($app_name);

   get_developer
        my $developer = $apigee->get_developer('fayland@binary.com') or die $apigee->errstr;

   create_developer
        my $developer = $apigee->create_developer(
            "email" => 'fayland@binary.com',
            "firstName" => "Fayland",
            "lastName" => "Lam",
            "userName" => "fayland.binary",
            "attributes" => [
                {
                    "name" => "Attr1",
                    "value" => "V1"
                },
                {
                    "name" => "A2",
                    "value" => "V2.v2"
                }
            ]
        );

   update_developer
        my $developer = $apigee->update_developer(
            $developer_email,
            {
                "firstName" => "Fayland",
                "lastName" => "Lam",
            }
        );

   delete_developer
        my $developer = $apigee->delete_developer('fayland@binary.com') or die $apigee->errstr;

   set_developer_status
        my $status = $apigee->set_developer_status($email, $status);

  Apps: Developer
    <http://apigee.com/docs/api/apps-developer>

   change_app_status
        my $app = $apigee->change_app_status($developer_email, $app_name);

   create_developer_app
        my $app = $apigee->create_developer_app(
            $developer_email,
            {
                "name" => "Test App",
                "apiProducts" => [ "{apiproduct1}", "{apiproduct2}", ...],
                "keyExpiresIn" => "{milliseconds}",
                "attributes" => [
                    {
                        "name" => "DisplayName",
                        "value" => "{display_name_value}"
                    },
                    {
                        "name" => "Notes",
                        "value" => "{notes_for_developer_app}"
                    },
                    {
                        "name" => "{custom_attribute_name}",
                        "value" => "{custom_attribute_value}"
                    }
                ],
                "callbackUrl" => "{url}",
            }
        );

   delete_developer_app
        my $app = $apigee->delete_developer_app($developer_email, $app_name);

   get_developer_app
        my $app = $apigee->get_developer_app($developer_email, $app_name);

   get_developer_apps
        my $apps = $apigee->get_developer_apps($developer_email);
        my $apps = $apigee->get_developer_apps($developer_email, { expand => 'true' });

   update_developer_app
        my $app = $apigee->update_developer_app($developer_email, $app_name, {
            # update part
        });

   regenerate_developer_app_key
        my $app = $apigee->regenerate_developer_app_key($developer_email, $app_name, {
            # update part
        });

   get_count_of_developer_app_resource
        my $count = $apigee->get_count_of_developer_app_resource($developer_email, $app_name, $entity_name);

  API Products
    <http://apigee.com/docs/api/api-products-1>

   get_api_products
        my $products = $apigee->get_api_products();
        my $products = $apigee->get_api_products(expand => 'true');

   search_api_products
        my $products = $apigee->search_api_products('attributename' => 'access', 'attributevalue' => 'public');
        my $products = $apigee->search_api_products('attributename' => 'access', 'attributevalue' => 'private', expand => 'true');

   get_api_product
        my $product = $apigee->get_api_product($product_name);

   get_api_product_details
        my $apps = $apigee->get_api_product_details(
            $product_name,
            query => 'list', entity => 'apps' # or query => 'count', entity => 'keys, apps, developers, or companies'
        );

   delete_api_product
        my $product = $apigee->delete_api_product($product_name);

   create_api_product
        my $product = $apigee->create_api_product(
            "approvalType" => "manual",
            "attributes" => [
                {
                  "name" => "access",
                  "value" => "private"
                },
                {
                  "name" => "ATTR2",
                  "value" => "V2"
                }
            ],
            "description" => "DESC",
            "displayName" => "TEST PRODUCT NAME",
            "name"  => "test-product-name",
            "apiResources" => [ "/resource1", "/resource2"],
            "environments" => [ "test", "prod"],
            # "proxies" => ["{proxy1}", "{proxy2}", ...],
            # "quota" => "{quota}",
            # "quotaInterval" => "{quota_interval}",
            # "quotaTimeUnit" => "{quota_unit}",
            "scopes" => ["user", "repos"]
        );

   update_api_product
        my $product = $apigee->update_api_product(
            "test-product-name",
            {
                "approvalType" => "auto",
                "displayName" => "ANOTHER TEST PRODUCT NAME",
            }
        );

  request
    The underlaying method to call Apigee when you see something is missing.

        $self->request('GET', "/o/$org_name/apps/$app_id");
        $self->request('DELETE', "/o/$org_name/developers/" . uri_escape($email));
        $self->request('POST', "/o/$org_name/developers", %args);
        $self->request('PUT', "/o/$org_name/developers/" . uri_escape($email), %args);

GITHUB
    <https://github.com/binary-com/perl-Apigee-Edge>

AUTHOR
    Binary.com <fayland@binary.com>

COPYRIGHT
    Copyright 2014- Binary.com

LICENSE
    This library is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.

SEE ALSO