BMI-enabled models are self-describing by uncovering models’ metadata through BMI (Basic Model Interface) functions, developed in CSDMS (Community Surface Dynamics Modeling System). We expose the BMI-enabled models as web services that allow users to access the functionality of BMI-enabled models through web services. A BMI-enabled web service model is composed of a set of REST API endpoints, each of which exposes a BMI function at most cases. One of the usages of BMI-enabled web services models is implemented in integrating these web service models through EMELI-WEB. Currently, BMI-enabled TopoFlow components are exposed as web services.
GET
/bmi/models
¶Return all the available BMI-enabled web service models.
Example request:
GET /bmi/models HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"models": [
"channels_diffusive_wave",
"channels_dynamic_wave",
"channels_kinematic_wave",
"met_base"]
}
GET
/bmi/models/{model}/working
¶Check whether a specific web service model named as model is working.
Parameters: |
|
---|
Example request:
GET /bmi/models/met_base/working HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Example response 1 – when the web service model is working:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": true
}
Example response 2 – when the web service model is not working:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": false
}
POST
/bmi/models/{model}/instantiate
¶Instantiate the BMI-enabled web service model with name ‘model’ and return back an ID for further web service interactions.
Parameters: |
|
---|
Example request:
POST /bmi/models HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"ID": "fa821dfbc4844559a6d67e910aa58db5"
}
PUT
/bmi/models/{model}/{id}/initialize
¶Initialize the BMI-enabled web service model with name model and id after it is instantiated and the configuration file if any is sent to it.
Parameters: |
|
---|
Example request:
PUT /bmi/models/met_base/fa821dfbc4844559a6d67e910aa58db5/initialize HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Example response1 – when the web service model is instantiated:
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "initialized",
"DONE": false,
"temp_file": "TopoFlow_Meterology_initialized.nc",
"time": 0.0
}
Example response2 – when it fails:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": "Model is not initialized."
}
PUT
/bmi/models/{model}/{id}/update
¶Update the BMI-enabled web service model with name model and id after it is initialized.
Parameters: |
|
---|---|
Query Parameters: | |
|
Example request:
PUT /bmi/models/met_base/fa821dfbc4844559a6d67e910aa58db5/update?download_updatenc=true HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Example response1 – when the web service model is updated and generates a NetCDF file:
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "updated",
"DONE": false,
"temp_file": "TopoFlow_Meterology_updated.nc",
"time": 6.0
}
Example response2 – when it fails:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": "Model is not updated."
}
PUT
/bmi/models/{model}/{id}/finalize
¶Finalize the BMI-enabled web service model with name model and id after the simulation is done.
Parameters: |
|
---|
Example request:
PUT /bmi/models/met_base/fa821dfbc4844559a6d67e910aa58db5/finalize HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Example response1 – when the web service model is instantiated:
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "finalized",
"DONE": true,
"temp_file": "TopoFlow_Meterology_finalized.nc",
"time": 24.0
}
Example response2 – when it fails:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": "Model is not finalized."
}
GET
/bmi/models/{model}/get_input_requirements
¶Return the configuration information about what the model with name model requires for the initialization in RDF triples.
Parameters: |
|
---|
GET
/bmi/models/{model}/{id}/get_input_var_names
¶Return the inputs of the BMI-enabled web service model with name model and id
Parameters: |
|
---|
Example request:
GET /bmi/models/met_base/fa821dfbc4844559a6d67e910aa58db5/get_input_var_names HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"inputs": [
"snowpack__z_mean_of_mass-per-volumn-density",
"snowpack__depth",
"snowpack__liquid-equivalent_depth",
"snowpack__melt_volume_flux"
]
}
GET
/bmi/models/{model}/{id}/get_output_var_names
¶Return the outputs of the BMI-enabled web service model with name model and id
Parameters: |
|
---|
Example request:
GET /bmi/models/met_base/fa821dfbc4844559a6d67e910aa58db5/get_output_var_names HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"outputs": [
"atmosphere_aerosol_dust__reduction_of_transmittance",
"atmosphere_air-column_water-vapor__liquid-equivalent_depth",
"atmosphere_bottom_air__brutsaert_emissivity_canopy_factor",
"atmosphere_bottom_air__temperature"
]
}
GET
/bmi/models/{model}/{id}/get_config_var_names
¶Return the config variables of the BMI-enabled web service model with name model and id
Parameters: |
|
---|
Example request:
GET /bmi/models/met_base/fa821dfbc4844559a6d67e910aa58db5/get_config_var_names HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"config": [
"water-liquid__mass-per-volume_density",
"model__time_step",
"land_surface__temperature",
"land_surface__emissivity"
]
}
GET
/bmi/models/{model}/{id}/get_attributes
¶Return the attributes of the BMI-enabled web service model with name model and id
Parameters: |
|
---|
Example request:
GET /bmi/models/met_base/fa821dfbc4844559a6d67e910aa58db5/get_attributes HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"attributes": {
"author_name": "Scott D. Peckham",
"cfg_extension": "_meteorology.cfg",
"cfg_template_file": "Meteorology.cfg.in",
"cmt_var_prefix": "/Meteorology/Input/Var/",
"comp_name": "Meteorology",
"dialog_title": "Meteorology: Method 1 Parameters",
"grid_type": "uniform",
"gui_xml_file": "/home/csdms/cca/topoflow/3.1/src/share/cmt/gui/Meteorology.xml",
"model_family": "TopoFlow",
"model_name": "TopoFlow_Meteorology",
"step_method": "explicit",
"time_step_type": "fixed",
"time_units": "seconds",
"version": "3.1"
}
}
GET
/bmi/models/{model}/{id}/get_time_step
¶Return the time step of the BMI-enabled web service model with name model and id after it is initialized.
Parameters: |
|
---|
Example request:
GET /bmi/models/met_base/fa821dfbc4844559a6d67e910aa58db5/get_time_step HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Example response1: when it succeeds:
HTTP/1.1 200 OK
Content-Type: application/json
{
"step": 0.6
}
Example response2: when it fails:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": "time step cannot be obtained"
}
GET
/bmi/models/{model}/{id}/get_time_units
¶Return the time units of the BMI-enabled web service model with name model and id after it is initialized.
Parameters: |
|
---|
Example request:
GET /bmi/models/met_base/fa821dfbc4844559a6d67e910aa58db5/get_time_units HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Example response1: when it succeeds:
HTTP/1.1 200 OK
Content-Type: application/json
{
"units": "second"
}
Example response2: when it fails:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": "time units cannot be obtained"
}
GET
/bmi/models/{model}/{id}/get_time/{when}
¶Return the time of the BMI-enabled web service model with name model and id after it is initialized.
Parameters: |
|
---|
Example request:
GET /bmi/models/met_base/fa821dfbc4844559a6d67e910aa58db5/get_time/current HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Example response1: when it succeeds in getting the current time:
HTTP/1.1 200 OK
Content-Type: application/json
{
"time": 12.0
}
Example response2: when it fails:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": "current time cannot be obtained"
}
GET
/bmi/models/{model}/{id}/{var}/get_grid_properties
¶Return the grid properties of the variable with name var in the BMI-enabled web service model with name model and id after it is initialized.
Parameters: |
|
---|
Example request:
GET /bmi/models/met_base/fa821dfbc4844559a6d67e910aa58db5/land_surface__slope_angle/get_grid_properties HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Example response1: when it succeeds:
HTTP/1.1 200 OK
Content-Type: application/json
{
"grid_type": "uniform",
"grid_info": {
"lower_left_corner": [377239, 4459392, 0.0],
"spacing": [24.37, 32.85, 0.0],
"shape": [586, 399, 0]
}
}
Example response2: when it fails:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": "fail in getting the grid properties of land_surface__slope_angle."
}
PUT
/bmi/models/{model}/{id}/set_vars_provided_list
¶Inform the BMI-enabled web service model with name model and id of the variables which would be used by other models after it is instantiated.
Parameters: |
|
---|---|
Request JSON Object: | |
|
Example request:
PUT /bmi/models/met_base/fa821dfbc4844559a6d67e910aa58db5/set_vars_provided HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Accept: application/json
Data: {"vars_provided": ["atmosphere_aerosol_dust__reduction_of_transmittance", "atmosphere_air-column_water-vapor__liquid-equivalent_depth"]}
Example response1: when it succeeds:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": "success"
}
Example response2: when it fails:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": "Fail in setting the provided variable list."
}
PUT
/bmi/models/{model}/{id}/set_values_for_vars
¶Reset the values of some variables in the BMI-enabled web service model with name model and id by sending a NetCDF file which includes the values of variables to be setted after the model is instantiated.
Parameters: |
|
---|---|
Form Parameters: | |
|
Example response1: when it succeeds:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": "success"
}
Example response2: when it fails:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": "Fail in setting the provided variable list."
}
PUT
/bmi/models/{model}/{id}/send_cfg_sup_files
¶Send a configuration file along with any input files to the BMI-enabled web service model with name model and id after the model is instantiated.
Parameters: |
|
---|---|
Form Parameters: | |
|
Example response1: when the configuration file(s) is successfully sent to the service:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": "success"
}
Example response2: when it fails:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": "Fail. File is not valid."
}
PUT
/bmi/models/{model}/{id}/update/{mode_status}
¶Update the mode status of the BMI-enabled web service model with name model and id after it is instantiated.
Parameters: |
|
---|
Example request:
PUT /bmi/models/met_base/fa821dfbc4844559a6d67e910aa58db5/update/driver HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Example response1: when it succeeds:
HTTP/1.1 200 OK
Content-Type: application/json
{
"mode": "driver"
}
Example response2: when it fails:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": "the mode is not updated"
}
GET
/bmi/models/{model}/{id}/output
¶Get the information of the output files of the BMI-enabled web service model with name model and id after it is instantiated.
Parameters: |
|
---|
Example request:
PUT /bmi/models/met_base/fa821dfbc4844559a6d67e910aa58db5/output HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Example response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"files": ["test_0D-I.nc"]
}
GET
/bmi/models/{model}/{id}/download_temp_nc/{filename}
¶Download the temporary NetCDF files of the BMI-enabled web service model with name model and id after the model is initialized, updated and finalized.
Parameters: |
|
---|
GET
/bmi/models/{model}/{id}/download_output/{filename}
¶Download the output files (if any) of the BMI-enabled web service model with name model and id after the model is finalized. The output file information can be obtained from the API endpoint of output.
Parameters: |
|
---|
DELETE
/bmi/models/{model}/{id}/remove
¶Remove the instance (the including the model instance and the files (i.e., input, output and temp files) if any) of BMI-enabled web service model with name model and id after the model is instantiated.
Example request:
DELETE /bmi/models/met_base/fa821dfbc4844559a6d67e910aa58db5/remove HTTP/1.1
Host: ecgs.ncsa.illinois.edu/
Example response1: when the model instance is removed:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": "success"
}
Example response2: when the ID does not exist*:
HTTP/1.1 200 OK
Content-Type: application/json
{
"info": "ID does not exist"
}