Myriad::Guide::Tutorial - introduction and tutorial for the Myriad framework
Most of the time, you would use the myriad.pl script to run everything.
The Myriad framework handles loading, logging, configuration and other tasks: you provide services which implement functionality, and wire them together. Instead of implementing top-level code, those services can call each other or subscribe to data streams.
Note that if you're on Windows, you may need to run the myriad.pl commands under PowerShell or WSL terminal, due to the nested quotes.
myriad.pl
Each service has a startup method - this is where you put code that should run once the service is loaded and ready.
startup
package Myriad::Example::Startup; # VERSION # To try this out, run: # myriad.pl service Myriad::Example::Startup use Myriad::Service ':v1'; async method startup (%args) { $log->infof('This is our example service, running code in the startup method'); } 1;
There are 3 key lines here - firstly, we give our service a name:
package Myriad::Example::Startup
Every service has a unique name, and we can have multiple instances of a given service (for example, connecting to different database shards or serving different domain names for a webhook).
Next, we load the framework and indicate that this is a service:
use Myriad::Service ':v1';
This line applies strict, warnings, and many other "standard" settings - see Myriad::Class for more details.
strict
warnings
Next, we provide methods - in this case, a startup method:
async method startup (%args) {
We're using Object::Pad for the method keyword - every service is a Perl OO class, and Object::Pad is the prototype for the planned Perl core OO implementation. The async keyword comes from Future::AsyncAwait - it allows us to use the await keyword if there are any asynchronous operations that should complete before we return.
method
async
await
"Remote procedure calls", usually abbreviated RPC, are the basic building blocks for services. Creating a method marked as RPC tells Myriad that this method should be available for other services to call.
RPC
package Myriad::Example::RPC; # VERSION # To try this out, run: # myriad.pl service Myriad::Example::RPC rpc myriad.example.rpc use Myriad::Service ':v1'; async method message : RPC { return 'Welcome to Myriad'; } 1;
We use subroutine attributes to mark a method as an RPC call.
This service takes parameters, in this case returning them as the result from the RPC call:
package Myriad::Example::Echo; # VERSION # To try this out, run: # myriad.pl service Myriad::Example::RPC rpc myriad.example.echo/message='{"message":"example message"}' use Myriad::Service ':v1'; async method echo : RPC (%args) { return $args{message}; } 1;
We're using Perl core signatures for the parameters, although you can use @_ as usual if you prefer:
@_
async method echo : RPC { my (%args) = @_; return $args{message}; }
package Myriad::Example::Call; # VERSION # To try this out, run: # myriad.pl service Myriad::Example::Call rpc myriad.example.call/remote_call use Myriad::Service ':v1'; async method remote_call : RPC (%args) { my $srv = await $api->service_by_name('myriad.example.call'); return await $srv->target_method; } async method target_method : RPC { return 'This is a method we call from within another service'; } 1;
The $api variable is available within services for accessing the service API - see Myriad::API for more details.
$api
To install Myriad, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Myriad
CPAN shell
perl -MCPAN -e shell install Myriad
For more information on module installation, please visit the detailed CPAN module installation guide.