V8Js

From DreamFactory
Jump to: navigation, search
Line 21: Line 21:
  
 
Using the '''event''' resource...
 
Using the '''event''' resource...
<source lang="javascript">
 
result = platform.api.post("http://example.com/my_api", {"name":"test"}, options);
 
</source>
 
 
Using the '''platform''' resource...
 
 
<source lang="javascript">
 
<source lang="javascript">
 
// Stop execution if verbs other than GET are used in Custom Scripting Service
 
// Stop execution if verbs other than GET are used in Custom Scripting Service
Line 43: Line 38:
 
</source>
 
</source>
  
 +
 +
Using the '''platform''' resource...
 +
<source lang="javascript">
 +
result = platform.api.post("http://example.com/my_api", {"name":"test"}, options);
 +
</source>
  
 
== Including Other Scripts ==
 
== Including Other Scripts ==

Revision as of 16:46, 23 February 2016

V8Js is a popular PHP extension that uses Google's V8 engine to execute Javascript code in a secure sandbox from within PHP. The executed code can be restricted using a time limit and/or memory limit. This provides the possibility to execute untrusted code with confidence. Note: While the scripts are written in Javascript, not all functionality available in browser-based Javascript is available in V8Js, particular things related to the DOM, window, or console. Go here for more information.

Requirements

V8Js is a PHP extension that currently is not part of the PHP standard distribution. It is however included in all of our Bitnami installs, including the IaaS and PaaS environments. If you are installing DreamFactory by other means, methods for compiling the extension can be found here or more externally here in the individual README files.

Additional Functions Available

In addition to standard Javascript functions, the following functions are also available for use in V8Js scripts.

  • print("some string") - Useful in debugging or logging from a script, the output of the call is written to the DreamFactory log.
  • var_dump(object) - Another debugging or logging function, this dumps the content of the object into the DreamFactory log as well.
  • sleep(seconds) - Pauses execution for the number of seconds passed in. Take care, as V8Js executes in a limited time, delaying processing obviously delays API handling.
  • require('script_name.js') - As in Javascript, this allows you to pull in others scripts. Scripts can currently be pulled from the <install directory>/storage/scripting/ simply by using the name of the script, i.e. 'test.js'.
  • exit() - This function halts the script, and currently blows up the PHP execution as well, so don't use it! Use throw('error string'); instead;

Accessing Resources

DreamFactory passes in two additional objects for use in the scripts. In V8Js, these resources are represented as javascript objects and can be accessed as normal. See the examples below.

Using the event resource...

// Stop execution if verbs other than GET are used in Custom Scripting Service
if (event.request.method !== "GET") {
    throw "Only HTTP GET is allowed on this endpoint."; // will result in a 500 back to client with the given message.
}
 
// Stop execution and return a specific status code
if (event.resource !== "test") {
    event.response.status_code = 400;
    event.response.content = {"error": "Invalid resource requested."};
    return;
}
 
// defaults to 200 status code
event.response.content = {"test": "value"};


Using the platform resource...

result = platform.api.post("http://example.com/my_api", {"name":"test"}, options);

Including Other Scripts

The script 'test.js' is located in the storage/scripting/ directory on my instance and simple defines an array, i.e. "exports.a = ['one', 'two','three'];

test = require('test.js');
var_dump(test.a);