Git Product home page Git Product logo

aws-sdk-php-resources's Introduction

AWS Resource APIs for PHP

@awsforphp on Twitter Build Status Apache 2 License

An extension to the AWS SDK for PHP for interacting with AWS services using resource-oriented objects.

Introduction

The core AWS SDK for PHP is composed of service client objects that have methods corresponding 1-to-1 with operations in the service's API (e.g., Ec2Client::runInstances() method maps to the EC2 service's RunInstances operation).

This project builds build upon the SDK to add new types of objects that allow you to interact with the AWS service APIs in a more resource-oriented way. This allows you to use a more expressive syntax when working with AWS services, because you are acting on objects that understand their relationships with other resources and that encapsulate their identifying information.

Installation

You must install the AWS Resource APIs using Composer by requiring the aws/aws-sdk-php-resources package (composer require aws/aws-sdk-php-resources) in your project.

Note: The Resource APIs use Version 3 of the AWS SDK for PHP.

Types of Objects

The Resource APIs introduce 4 new objects, all within the Aws\Resource namespace.

1. Aws

The Aws object acts as the starting point into the resource APIs.

<?php

require 'vendor/autoload.php';

use Aws\Resource\Aws;

$aws = new Aws($config);

// Get a resource representing the S3 service.
$s3 = $aws->s3;

The $config, as provided in the preceding example, is an array of configuration options that is the same as what you would provide when instantiating the Aws\Sdk object in the core SDK. This includes things like 'region', 'version', your credentials, etc.

You can overwrite the global config options for a service by specifying new values when you get the service's resource.

$s3 = $aws->s3(['region' => 'eu-central-1']);

The AWS Resource APIs currently supports 7 services (cloudformation, ec2, glacier, iam, s3, sns, sqs).

2. Resource

Resource objects each represent a single, identifiable AWS resource (e.g., an Amazon S3 bucket or an Amazon SQS queue). They contain information about how to identify the resource and load its data, the actions that can be performed on it, and the other resources to which it is related.

You can access a related resource by calling the related resource's name as a method and passing in its identity.

$bucket = $aws->s3->bucket('my-bucket');
$object = $bucket->object('image/bird.jpg');

Accessing resources this way is evaluated lazily, meaning that the previous example does not actually make any API calls.

Once you access the data of a resource, an API call will be triggered to "load" the resource and fetch its data. To retrieve a resource object's data, you can access it like an array.

echo $object['LastModified'];

You can also use the getIdentity() and getData() methods to extract the resource's data.

print_r($object->getIdentity());
# Array
# (
#     [BucketName] => my-bucket
#     [Key] => image/bird.jpg
# )

print_r($object->getData());
# Array
# (
#     ...
# )

Performing Actions

You can perform actions on a resource by calling verb-like methods on the object.

// Create a bucket and object.
$bucket = $aws->s3->createBucket([
    'Bucket' => 'my-new-bucket'
]);
$object = $bucket->putObject([
    'Key'  => 'images/image001.jpg',
    'Body' => fopen('/path/to/image.jpg', 'r'),
]);

// Delete the bucket and object.
$object->delete();
$bucket->delete();

Because the resource's identity is encapsulated within the resource object, you never have to specify it again once the object is created. This way, actions like $object->delete() do not need to require arguments.

3. Collection

Some resources have a "has many" type relationship with other resources. For example, an S3 bucket has many objects. When you access a pluralized property or method on a resource, you will get back a Collection of resources. Collections are iterable, but have an unknown length, because the underlying API operation used to retrieve the resource data may require multiple calls. They leverage the core SDK's Paginators feature to be able to handle iterating through pages of resource data on your behalf.

Collections, like resources, are lazily evaluated, so they don't actually trigger any API calls until you start iterating through the resources.

foreach ($bucket->objects() as $object) {
    echo "Deleting object {$object['Key']}...\n";
    $object->delete();
}

4. Batch

Batches are similar to collections, but are finite in length. Batches are returned as the result of performing an action, where multiple resources are returned. For example, an SQS "Queue" resource has an action named "ReceiveMessages" that results in returning a batch of up to 10 "Message" resources.

$messages = $queue->receiveMessages(['VisibilityTimeout' => 60]);
echo "Number of Messages Received: " . count($messages) . "\n";
echo "Receipt Handles:\n";
foreach ($messages as $message) {
    echo "- {$message['ReceiptHandle']}\n";
    $message->delete();
}

Using Resources

We are currently working on providing API documentation for the AWS Resource APIs. Even without docs, you can programmatically determine what methods are available on a resource object by calling the respondsTo() method.

print_r($bucket->respondsTo());
# Array
# (
#     [0] => create
#     [1] => delete
#     [2] => deleteObjects
#     [3] => putObject
#     [4] => multipartUploads
#     [5] => objectVersions
#     [6] => objects
#     [7] => bucketAcl
#     [8] => bucketCors
#     [9] => bucketLifecycle
#     [10] => bucketLogging
#     [11] => bucketPolicy
#     [12] => bucketNotification
#     [13] => bucketRequestPayment
#     [14] => bucketTagging
#     [15] => bucketVersioning
#     [16] => bucketWebsite
#     [17] => object
#     [18] => exists
# )

You can use that same respondsTo() method to check if a particular method is available. The getMeta() method may also help you discover more about how your resource object works as well.

var_dump($bucket->respondsTo('putObject'));
# bool(true)

print_r($bucket->getMeta());
# Array
# (
#     ...
# )

TODO

There is still a lot of work to do on the AWS Resources API for PHP. Here are some things we have on the list to work on soon.

  1. Support for batch actions on Batch and Collection objects (e.g., $messages->delete();)
  2. Support for more AWS services
  3. API documentation for the AWS Resource APIs

Check out the AWS Resource APIs and let us now what questions, feedback, or ideas you have in the issue tracker. Thanks!

aws-sdk-php-resources's People

Contributors

jeremeamia avatar simpod avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aws-sdk-php-resources's Issues

Archive this repository

Hello โœ‹
Should we archieve this repository in favor to aws/aws-sdk-php? It seems that it's not being maintained anymore (opened issues from 2015, last release pointed to aws-sdk-php of 4 years ago as well).
I think that it would be a good idea to avoid doubts.

Request for Feedback

Thanks for taking a look at the AWS Resource APIs for PHP. We'd love it if you would provide some feedback and share any ideas you might have to improve the project.

where to find secret value?

It's the first time I use AWS' API SDK.
I want to use Ec2Client, but I don't know where to find the $config['secret'] value.

Compatibility s3 tls

Hi guys,

Does anyone know if version 0.3.0 is compatible with tls 1.3?
Because i need to use tls 1.3 to connect to the bucket in s3.

Thanks!

Cognito PHP

How can we Signup User from AWS cognito..?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.