Adding Parameters
Description
In this example, we add a Parameter to the Service Endpoint Page.
Discussion
Our first attempt at an endpoint is just to Demonstrate that an A5W page does not need to return just HTML. Lets say we wanted to be able to Return the Contents of either the Customers or the Products table.
To do this, Edit the endpoint page to take a 'tablename' parameter, which will select the table to use, or return an error.
Add the code below to the top of the page, replacing the dim sql as c variable assignment.
dim tablename as c ' Validate the tablename if eval_valid("request.variables.tablename") then tablename = request.variables.tablename if tablename <> "Customers" .and. tablename <> "Products" then ? "{ \"error\" : \"Cannot Access table "+tablename+"\" }" end end if else ? "{ \"error\" : \"No tablename specified \" }" end end if dim sql as c = "select * from "+tablename
Page With Parameters Changes Applied
<%a5 dim tablename as c ' Validate the tablename if eval_valid("request.variables.tablename") then tablename = request.variables.tablename if tablename <> "Customers" .and. tablename <> "Products" then ? "{ \"error\" : \"Cannot Access table "+tablename+"\" }" end end if else ? "{ \"error\" : \"No tablename specified \" }" end end if dim sql as c = "select * from "+tablename dim cn as sql::Connection cn.PortableSQLEnabled = .t. if cn.Open("::Name::Northwind") then if cn.Execute(sql) then dim rs as sql::ResultSet = cn.ResultSet dim responseJson as c = rs.ToJSONObjectSyntax() responseJson = "{ \"items\" : [" + strtran( alltrim(responseJson) , crlf(), ","+crlf() ) + "] }" ? json_reformat( responseJson ) else dim resp.error as c = cn.CallResult.Text ? json_generate(resp) end if else dim resp.error as c = cn.CallResult.Text ? json_generate(resp) end if %>
Testing Service Endpoint With Parameters
Now if we use the original curl command, we receive a JSON packet with the error indicating that we have not specified a require paremeter.
Supply the parameter, and now our page can bring back either .
>curl "http://127.0.0.1:8081/service_endpoint.a5w" { "error" : "No tablename specified " } >curl "http://127.0.0.1:8081/service_endpoint.a5w?tablename=products" { "items": [ { "ProductID": "1", "ProductName": "Chai", "SupplierID": "1", "CategoryID": "1", "QuantityPerUnit": "10 boxes x 20 bags", "UnitPrice": "18", "UnitsInStock": "39", "UnitsOnOrder": "0", "ReorderLevel": "10", "Discontinued": "F" }, { "ProductID": "2", .....