The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Plack::Middleware::REST::Util;

our $VERSION = '0.03';

use Plack::Request;

use parent 'Exporter';

our @EXPORT = qw(request_id request_content request_uri);

sub request_id {
    substr($_[0]->{PATH_INFO} || '/',1)
}

sub request_content {
    return unless defined $_[0]->{CONTENT_LENGTH};
    return (Plack::Request->new($_[0])->content => $_[0]->{CONTENT_TYPE});
}

sub request_uri {
    my $env = shift;
    my $id  = @_ ? shift : request_id($env);
    my $uri = Plack::Request->new($env)->base;
    $uri .= '/' unless $uri =~ qr{/$};
    return $uri . $id;
}

1;
__END__

=head1 NAME

Plack::Middleware::REST::Util - Utility methods to create RESTful PSGI applications

=head1 SYNOPSIS

    use Plack::Middleware::REST::Util;

    $id  = request_id($env)      # empty string or local resource identifier
    $uri = request_uri($env)     # resource identifier of current request
    $uri = request_uri($env,$id) # resource identifier of modified request
    ($content => $type) = request_content($env); # send content and MIME type

=cut