Adding an API
|
<< Click to Display Table of Contents >> Navigation: Web UI & API > Extending UI & API > Adding an API |
For example, to add a new API:

LogicEngineController.cs:
using BNCS.Logic.Engine;
using BNCS.Logic.Models;
using BNCS.Logic.Server.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ApplicationModels;
using System.Net;
namespace BNCS.Logic.Server.Controllers
{
[Route("x-bncs/logic")]
[ApiController]
[Tags("BNCS Logic Server API")]
public class LogicEngineController : ControllerBase
{
[HttpGet]
public Guid[] GetModels()
{
return LogicEngine.GetModelList();
}
[HttpGet("{id}")]
public LogicModel GetModel(Guid id)
{
return LogicEngine.GetModel(id);
}
[HttpGet("{id}/inputs")]
public Guid[] GetModelInputPorts(Guid id)
{
return LogicEngine.GetModelInputPorts(id);
}
[HttpGet("{modelId}/inputs/{portId}")]
public LogicPort GetModelInputPort(Guid modelId, Guid portId)
{
return LogicEngine.GetModelInputPort(modelId, portId);
}
[HttpGet("{modelId}/inputs/{portId}/value")]
public object GetModelInputPortValue(Guid modelId, Guid portId)
{
return LogicEngine.GetModelInputPortValue(modelId, portId);
}
[HttpPut("{modelId}/inputs/{portId}/value")]
public IActionResult PutModelInputPortValue(Guid modelId, Guid portId, [FromBody()] ValueDTO value)
{
switch (value.ValueType)
{
case ValueDTO.ValueTypes.Boolean:
if (LogicEngine.SetModelInputPortValue(modelId, portId, value.Value.GetBoolean())) return new OkResult();
break;
case ValueDTO.ValueTypes.Integer:
if (LogicEngine.SetModelInputPortValue(modelId, portId, value.Value.GetInt32())) return new OkResult();
break;
case ValueDTO.ValueTypes.Double:
if (LogicEngine.SetModelInputPortValue(modelId, portId, value.Value.GetDouble())) return new OkResult();
break;
case ValueDTO.ValueTypes.String:
if (LogicEngine.SetModelInputPortValue(modelId, portId, value.Value.GetString())) return new OkResult();
break;
}
return BadRequest();
}
[HttpGet("{id}/outputs")]
public Guid[] GetModelOutputPorts(Guid id)
{
return LogicEngine.GetModelOutputPorts(id);
}
[HttpGet("{modelId}/outputs/{portId}")]
public LogicPort GetModelOutputPort(Guid modelId, Guid portId)
{
return LogicEngine.GetModelOutputPort(modelId, portId);
}
[HttpGet("{modelId}/outputs/{portId}/value")]
public object GetModelOutputPortValue(Guid modelId, Guid portId)
{
return LogicEngine.GetModelOutputPortValue(modelId, portId);
}
[HttpDelete("{id}")]
public IActionResult DeleteModel(Guid id)
{
if (LogicEngine.DeleteModel(id))
{
return StatusCode((int)HttpStatusCode.NoContent);
}
return StatusCode((int)HttpStatusCode.NotFound);
}
[HttpPost]
public IActionResult PostModel(LogicModel model)
{
if (LogicEngine.LoadModel(model))
{
return new OkResult();
}
return StatusCode((int)HttpStatusCode.InternalServerError);
}
}
}
Controllers for API's should have the [ApiController] attribute set to differentiate them from view controllers