#

API: Daten Ändern und Erstellen mit Api

 

 

Mit API Schnittstellen können Clients wie Smartphones, Desktop Programme oder IoT Geräte Daten mit einem Internet Server austauschen.

Api entspricht der sogenannten REST Schnittstelle im Internet, bei welcher Daten ausgetauscht werden mit HttpGet, HttpPut und HttpPost.

 

Beispiel C# Code Asp.Net Core Api.

Update Datensatz mit API

Im API Controller muss eine Methode vorhanden sein, welche das Attribut

[HttpPut("{id}")]

public async Task<IActionResult> PutProject([FromRoute] int id, [FromBody] Project clientApi_Project)

{..}

 

Sobald eine Client Anfrage als HttpPut ankommt und diese Struktur enthält, wird diese Methode aufgerufen

1) Dann wird geprüft

a) sind die Daten gültig (Integer Min Max Werte, Stringlängen)

b) Entspricht die ID der gelieferten Daten gleich der Adresse im Pfad /ID

 

2) Dann wird vom Server-Context der passende Datensatz über SqlClient Context geholt. Context ist eine ADO Sql Server Verbindung.

Wenn der Datensatz gefunden wird, dann werden die Server-Werte mit ankommenden Werten der API Daten überschrieben.

3) und abschliessend wird mit .SaveChanges() die Daten auf den Server aktualisiert

       // PUT-Update: api/Projects/5  *UPDADTE Save Recordset

        [HttpPut("{id}")]

        public async Task<IActionResult> PutProject([FromRoute] int id, [FromBody] Project clientApi_Project)

        {

            //------------< PutProject(ID,Project) >------------

            if (!ModelState.IsValid)

            {

                return BadRequest(ModelState);

            }

 

            if (id != clientApi_Project.ID_Project)

            {

                return BadRequest();

            }

 

            //< get recordset from db >

            var serverProject = await _context.tbl_Projects.SingleOrDefaultAsync(m => m.ID_Project == id);

            //</ get recordset from db >

 

            if (serverProject == null)

            {

                return NotFound();

            }

            //< SET Values >

            serverProject.Text = clientApi_Project.Text;

            serverProject.Title = clientApi_Project.Title;

            serverProject.DtEdit = DateTime.Now;

            //</ SET Values >

 

            //-< save >-

            try

            {

                await _context.SaveChangesAsync();

            }

            //< error >

            catch (DbUpdateConcurrencyException)

            {

                if (!ProjectExists(id))

                {

                    return NotFound();

                }

                else

                {

                    throw;

                }

            }

            //</ error >

            //-</ save >-

 

            //< result >

            return Ok();

            //</ result >

            //------------</ PutProject(ID,Project) >------------

        }

 

 

Create New Datensatz mit API

Im API Controller muss eine Methode vorhanden sein, welche das Attribut HttpPost aufweist

[HttpPost]

public async Task<IActionResult> Create_NewProject([FromBody] Project clientApi_Project)

{..}

 

Sobald eine Client Anfrage als HttpPost ankommt und diese Struktur enthält, wird diese Methode aufgerufen

1) Dann wird geprüft

a) sind die Daten gültig (Integer Min Max Werte, Stringlängen)

b) Ist die ID Null oder 0. Da diese vom Server aus Auto-Increment vergeben wird.

 

2) Daten anpassen.

Die ankommenden Daten werden direkt angepasst auf Standardvorgaben und Korrekturen, bevor diese an den Server übergeben werden.

clientApi_Project.DtCreated = DateTime.Now;

 

3) und abschliessend wird der Datensatz an den Context angefügt und danach der Context aktualisiert.

_context.tbl_Projects.Add(clientApi_Project);

await _context.SaveChangesAsync();

 

 

// POST-NEW: api/Projects   *CREATE NEW Recordset

        [HttpPost]

        public async Task<IActionResult> Create_NewProject([FromBody] Project clientApi_Project)

        {

            //------------< Create_NewProject(Project) >------------

            //public async Task<IActionResult> PostProject([FromBody] Project project)

            //*NEW Project

            if (!ModelState.IsValid)

            {

                return BadRequest(ModelState);

            }

            //< check ID >

            if (clientApi_Project.ID_Project!=0)

            {

                return BadRequest("ID not null or 0");

            }

            //</ check ID >

 

            //< Correct Data >

            clientApi_Project.DtCreated = DateTime.Now;

            //< Correct Data >

 

            //< add Recordset >

            //*add

            _context.tbl_Projects.Add(clientApi_Project);

            await _context.SaveChangesAsync();

            //</ add Recordset >

 

            //< return >

            return CreatedAtAction("GetProject", new { id = clientApi_Project.ID_Project }, clientApi_Project);

            //</ return >

            //------------</ Create_NewProject(Project) >------------

        }

 

 

Zum Test werden die Daten mit der Google Chrome Extension übergeben

 

Danach sollte das Ergebnis auf dem SQL Server wieder auffindbar sein

 

Kompletter API Code

Mit SQL Server Tabelle tbl_Projects

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;

using Microsoft.AspNetCore.Http;

using Microsoft.AspNetCore.Mvc;

using Microsoft.EntityFrameworkCore;

using Freiberufler;

using Freiberufler.Models;

 

namespace Freiberufler.Controllers.Api

{

    [Produces("application/json")]

    [Route("api/Projects")]

    public class ProjectsController : Controller

    {

        private readonly app_Database_Context _context;

 

        #region Class

        public ProjectsController(app_Database_Context context)

        {

            _context = context;

        }

        #endregion

 

        #region API

        //--------------------< region: API Methods >--------------------

 

        // GET-all: api/Projects *List all Records

        [HttpGet]

        public IEnumerable<Project> Gettbl_Projects()

        {

            //------------< Gettbl_Projects() >------------

            return _context.tbl_Projects;

            //------------</ Gettbl_Projects() >------------

        }

 

        // GET-1: api/Projects/5 *SELECT 1 Record

        [HttpGet("{id}")]

        public async Task<IActionResult> GetProject([FromRoute] int id)

        {

            //------------< GetProject(ID) >------------

            if (!ModelState.IsValid)

            {

                return BadRequest(ModelState);

            }

 

            //< get recordset from db >

            var project = await _context.tbl_Projects.SingleOrDefaultAsync(m => m.ID_Project == id);

            //</ get recordset from db >

 

            if (project == null)

            {

                return NotFound();

            }

 

            return Ok(project);

            //------------</ GetProject(ID) >------------

        }

 

        // PUT-Update: api/Projects/5  *UPDADTE Save Recordset

        [HttpPut("{id}")]

        public async Task<IActionResult> PutProject([FromRoute] int id, [FromBody] Project clientApi_Project)

        {

            //------------< PutProject(ID,Project) >------------

            if (!ModelState.IsValid)

            {

                return BadRequest(ModelState);

            }

 

            if (id != clientApi_Project.ID_Project)

            {

                return BadRequest();

            }

 

            //< get recordset from db >

            var serverProject = await _context.tbl_Projects.SingleOrDefaultAsync(m => m.ID_Project == id);

            //</ get recordset from db >

 

            if (serverProject == null)

            {

                return NotFound();

            }

            //< SET Values >

            serverProject.Text = clientApi_Project.Text;

            serverProject.Title = clientApi_Project.Title;

            serverProject.DtEdit = DateTime.Now;

            //</ SET Values >

 

            //-< save >-

            try

            {

                await _context.SaveChangesAsync();

            }

            //< error >

            catch (DbUpdateConcurrencyException)

            {

                if (!ProjectExists(id))

                {

                    return NotFound();

                }

                else

                {

                    throw;

                }

            }

            //</ error >

            //-</ save >-

 

 

 

 

            //< result >

            //return NoContent();

            return Ok();

            //</ result >

            //------------</ PutProject(ID,Project) >------------

        }

 

 

        // POST-NEW: api/Projects   *CREATE NEW Recordset

        [HttpPost]

        public async Task<IActionResult> Create_NewProject([FromBody] Project clientApi_Project)

        {

            //------------< Create_NewProject(Project) >------------

            //public async Task<IActionResult> PostProject([FromBody] Project project)

            //*NEW Project

            if (!ModelState.IsValid)

            {

                return BadRequest(ModelState);

            }

            //< check ID >

            if (clientApi_Project.ID_Project!=0)

            {

                return BadRequest("ID not null or 0");

            }

            //</ check ID >

 

            //< Correct Data >

            clientApi_Project.DtCreated = DateTime.Now;

            //< Correct Data >

 

            //< add Recordset >

            //*add

            _context.tbl_Projects.Add(clientApi_Project);

            await _context.SaveChangesAsync();

            //</ add Recordset >

 

            //< return >

            return CreatedAtAction("GetProject", new { id = clientApi_Project.ID_Project }, clientApi_Project);

            //</ return >

            //------------</ Create_NewProject(Project) >------------

        }

 

        // DELETE: api/Projects/5   *DELETE by ID

        [HttpDelete("{id}")]

        public async Task<IActionResult> DeleteProject([FromRoute] int id)

        {

            //------------< DeleteProject(ID) >------------

            if (!ModelState.IsValid)

            {

                return BadRequest(ModelState);

            }

 

            var project = await _context.tbl_Projects.SingleOrDefaultAsync(m => m.ID_Project == id);

            if (project == null)

            {

                return NotFound();

            }

 

            _context.tbl_Projects.Remove(project);

            await _context.SaveChangesAsync();

 

            return Ok(project);

            //------------</ DeleteProject(ID) >------------

        }

 

        //--------------------</ region: API Methods >--------------------

        #endregion / API

 

        #region Sys Methods

        //--------------------< region: Sys Methods >--------------------

        private bool ProjectExists(int id)

        {

            return _context.tbl_Projects.Any(e => e.ID_Project == id);

        }

        //--------------------</ region: Sys Methods >--------------------

        #endregion /Sys Methods

 

    }

}

 

Mobile

.

123movies