MgFunction
Last updated
Last updated
If you like to create custom function such as on AWS Lambda or Google Cloud Function, Microgen also give you that super power. Every function run on its own node or even clustered server. Function in microgen is called MgFunction.
Go to MgFunction menu on microgen, then create a new function via plus fab button
There are four trigger type on MgFunction such as, http, pub-sub, responder-requester, and table. Every trigger has its own unique functionality. We'll discuss it later.
Function "handler" is the main function that directly called on server. You can make another private function but, thats not will be called directly when server running, but should be calling inside the handler function.
MgFunction http is a simple http protocol, or you can simply make a REST API here. You can choose GET, POST, PATCH, or DELETE method via the dropdown.
In every method you'll noticed that there is a dependency injection parameter such as "app", "context", and "callback".
Parameter
Description
app.getRequester
to get Event sourcing topic from responder-requester trigger
app.getPublisher
to get Publisher and publish to its topic, to be called on subscriptions
context.body
get the http body
context.cookies
get the http cookies
context.method
get the http method type
context.params
get the http params
context.query
get the http query
context.headers
get the http headers
callback
return error and response data
You can either choose GET, POST, PATCH, or DELETE method. In this example we'll make a simple GET method.
Because we choose Http trigger, and GET method, later you can access it directly via REST API. This function will return a response that consist of simple hello message, and context data. Click "Save & Deploy" to run this function, and you can access it via CURL or browser.
If you are an old user in microgen, you will be noticed that the API code hook is not there anymore. It's because we move the API code in the mgFunction, so you can use it as normal function, and not losing your old API.
On the method dropdown, choose legacy method. Then you can simply make any API that you need.
to be noticed, that you must Re-Run the microgen in order to deploy this function.
MgFunction pub-sub is a simple Subscriber to listen any Publisher that trigger an event. This can be useful for asynchronous call such as booking, transaction, etc. In MgFunction, you can choose trigger type "pub-sub", and set the topic as you need.
Parameter
Description
app.getRequester
to get Event sourcing topic from responder-requester trigger
app.getPublisher
to get Publisher and publish to its topic, to be called on subscriptions
context
any
We'll make simple booking function that save to transaction db when success, and sending an email to the user.
save the function with any name, and set the topic to "booking"
You can call the subscriptions function either via GraphQL publish mutation or via http call. Here is the example how to trigger the subscriptions via GraphQL
or you can make simple http function to call this subscriptions.
then you can call it via CURL or API
You can listen the subscriptions on client side using GraphQL like this
MgFunction responder-requester is a simple Responder to listen any Requester that trigger an event. This can be useful for asynchronous call such as booking, transaction, etc. In MgFunction, you can choose trigger type "responder-requester", and set the topic as you need. The difference with pub-sub is, you can return a response from the Responder.
Parameter
Description
app.getRequester
to get Event sourcing topic from responder-requester trigger
app.getPublisher
to get Publisher and publish to its topic, to be called on subscriptions
context
any
callback
return error and response data
We'll make simple booking function that save to transaction db when success, and sending an email to the user.
Save the file name with "bookingresponder", and set the type to "booking". As we can see, Its not like a subscriptions because we can actually send a response to the requester whenever any requester triggering this event.
You can call the responder function either via GraphQL publish mutation or via http call. Here is the example how to trigger the responder via GraphQL
or you can make simple http function to call this subscriptions.
then you can call it via CURL or API
Table Trigger is work like hook on table services. Whether it afterFind, beforeFind, afterCreate, beforeCreate etc. We can do something like:
modify data context
triggering event (pubsub or requester-responder)
calling another API
validation (user, form, etc)
change query
Parameter
Description
app.getRequester
to get Event sourcing topic from responder-requester trigger
app.getPublisher
to get Publisher and publish to its topic, to be called on subscriptions
app.env
get the env variables
context.data
get the user input data
context.result
get the table data
context.params.user
get the user data
context.params.query
get the table current query
context.params.headers
get the http header (Token etc)
Choose a designated table and one event whether beforeFind, afterFind, beforeCreate, etc. Then we can modify the context, sending event, calling third party API, etc.
For example we'll make a beforeFind event on a table.
The legacy one actually almost the same with the normal table trigger function. The difference is we must Re-run the microgen in order to make it work, and all trigger function can be used on single place like this.
Whenever any table action triggered, it will automatically call the function that you already setting up. So it can be from anywhere, whether it an event, http call, or direct table access.