NAME
Amon2::Plugin::Web::CpanelJSON - Cpanel::JSON::XS plugin
SYNOPSIS
use Amon2::Lite;
use Cpanel::JSON::XS::Type;
use HTTP::Status qw(:constants);
__PACKAGE__->load_plugins(qw/Web::CpanelJSON/);
use constant HelloWorld => {
message => JSON_TYPE_STRING,
};
get '/' => sub {
my $c = shift;
return $c->render_json(+{ message => 'HELLO!' }, HelloWorld, HTTP_OK);
};
__PACKAGE__->to_app();
DESCRIPTION
This is a JSON plugin for Amon2. The differences from Amon2::Plugin::Web::JSON are as follows.
* Cpanel::JSON::XS::Type is available
* HTTP status code can be specified
* Flexible Configurations
METHODS
$c->render_json($data, $json_spec, $status=200);
-
Generate JSON
$data
and$json_spec
and returns instance of Plack::Response.$json_spec
is a structure for JSON encoding defined in Cpanel::JSON::XS::Type.
CONFIGURATION
- json
-
Parameters of Cpanel::JSON::XS. Default is as follows:
ascii => !!1,
Any parameters can be set:
__PACKAGE__->load_plugins( 'Web::CpanelJSON' => { json => { ascii => 0, utf8 => 1, canonical => 1, } } );
- secure_headers
-
Parameters of HTTP::SecureHeaders. Default is as follows:
content_security_policy => "default-src 'none'", strict_transport_security => 'max-age=631138519', x_content_type_options => 'nosniff', x_download_options => undef, x_frame_options => 'DENY', x_permitted_cross_domain_policies => 'none', x_xss_protection => '1; mode=block', referrer_policy => 'no-referrer',
- json_escape_filter
-
Escapes JSON to prevent XSS. Default is as follows:
'+' => '\\u002b', '<' => '\\u003c', '>' => '\\u003e',
- name
-
Name of method. Default: 'render_json'
- unbless_object
-
Default: undef
This option is preprocessing coderef encoding an blessed object in JSON. For example, the code using Object::UnblessWithJSONSpec is as follows:
use Object::UnblessWithJSONSpec (); __PACKAGE__->load_plugins( 'Web::CpanelJSON' => { unbless_object => \&Object::UnblessWithJSONSpec::unbless_with_json_spec, } ); ... package Some::Object { use Mouse; has message => ( is => 'ro', ); } my $object = Some::Object->new(message => 'HELLO'); $c->render_json($object, { message => JSON_TYPE_STRING }) # => {"message":"HELLO"}
- status_code_field
-
Default: undef
It specify the field name of JSON to be embedded in the
X-API-Status
header. Default isundef
. If you set theundef
to disable thisX-API-Status
header.__PACKAGE__->load_plugins( 'Web::CpanelJSON' => { status_code_field => 'status' } ); ... $c->render_json({ status => 200, message => 'ok' }) # send response header 'X-API-Status: 200'
In general JSON API error code embed in a JSON by JSON API Response body. But can not be logging the error code of JSON for the access log of a general Web Servers. You can possible by using the
X-API-Status
header. - defence_json_hijacking_for_legacy_browser
-
Default: false
LICENSE
Copyright (C) kfly8.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
kfly8 <kfly@cpan.org>