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:
 

clip0012

 

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