.NET APIs Part 5 – All the CRUD APIs

In the previous posting we saw how to create an API to get all the cars in our database. In this posting we’ll look at the remaining CRUD (Create Review Update Delete) operations.

As you may remember, we created a controller named CarController. ASP.NET will strip off the word Controller, leaving us with Car, which we will use to access the endpoints of our API.

An endpoint is just a URL that takes us to the operation we want.

We looked at GetAll, let’s take a look at Get. In this case, we have an id for the car we want, but we want all the details of that car. Simple!

First we need a method in our controller:

[HttpGet("{id}")]
public async Task<ActionResult<Car>> Get(int id)
{
   var car = await _carRepository.Get(id);
   if (car == null)
   {
      return NotFound();
   }
   return car;
}


Notice that next to the HttpGet attribute we indicate that the endpoint will take the id of the car we want

[HttpGet("{id}")]

This means we need to modify the URL to access the endpoint by adding the actual id of the desired record.

The first thing we do is call the repository, passing in the id.

public async Task<Car?> Get(int id)
{
   var query = "select * from car where id=@id";
   using var db = databaseConnectionFactory.GetConnection();
   return await db.QuerySingleOrDefaultAsync<Car>(query, new {id});
}

In the Get method of the repo we create our query, get our connection and execute the query returning the value we retrieved (if any). This is very close to what we did previously.

Back in the controller, we check to ensure that we received a Car. If not, we return NotFound which is a shorthand way of returning a 404 message. Otherwise we return the Car as a Json object. You can see this in Postman:

We’ll issue a Get command passing in the URL, ending with the id of the car we want (in this case 4)

 

 

 

Notice that we get back a 200, indicating success. In the body of the returned Json we get back all the details of the Car. (If you decide to use DTOs you can get whatever subset of the information makes sense):

{
    “id”: 4,
    “name”: “subaru impreza”,
    “mpg”: “16”,
    “cylinders”: “8”,
    “displacement”: “304”,
    “horsepower”: “150”,
    “weight”: “3433”,
    “acceleration”: “12”,
    “model_year”: “22”,
    “origin”: “usa”,
    “is_deleted”: “0”
}

Post

Adding a Car to the database is quite similar. We need a method in the controller and one in the repo. Here is the controller method:

[HttpPost]
public async Task<ActionResult<Car>> Post([FromBody] Car car)
{
   try
   {
      car = await _carService.Insert(car);
   }
   catch (Exception e)
   {
      return BadRequest(e); 
   }

   return CreatedAtAction(nameof(Get), new { id = car.Id }, car);
}

Look at the attribute in the parameter ([FromBody]. This indicates to the API that the data needed to insert this Car will be in the body of the call. The alternative is FromQuery. You can, in fact, use both in one call.

Note: CreatedAction causes a return code of 201, which is what we want. Here’s the body we’ll insert:

{
        “name”: “chevrolet chevelle malibu”,
        “mpg”: “18”,
        “cylinders”: “8”,
        “displacement”: “307”,
        “horsepower”: “130”,
        “weight”: “3504”,
        “acceleration”: “12”,
        “model_year”: “70”,
        “origin”: “usa”,
        “is_deleted”: “0”
    }

When we click Send this data is sent to the API which returns 201 (created) and in the body of the returned data we see the new id assigned to this car

{
    “id”: 409,
    “name”: “chevrolet chevelle malibu”,
    “mpg”: “18”,
    “cylinders”: “8”,
    “displacement”: “307”,
    “horsepower”: “130”,
    “weight”: “3504”,
    “acceleration”: “12”,
    “model_year”: “70”,
    “origin”: “usa”,
    “is_deleted”: “0”
}

Service Class

Notice that this time, instead of calling the Repo directly, the method in the controller calls into a service class. A service class is a great way to get the logic out of the controller, where it does not belong, without putting it into the repo, where it also does not belong.

Here’s the top of the CarService

public class CarService : ICarService
{
   private readonly ICarRepository _carRepository;

   public CarService(ICarRepository carRepository)
   {
      _carRepository = carRepository;
   }

   public async Task<Car> Insert(Car car)
   {
      var newId = await _carRepository.UpsertAsync(car);
      if (newId > 0)
      {
         car.Id = newId;
      }
      else
      {
         throw new Exception("Failed to insert car");
      }
   return car;
   }

All the logic associated with this insert (e.g., making sure we get back a legitimate id from the repository, etc.) is encapsulated in the service.

This leaves the repository free to just talk to the database,

public async Task<int> UpsertAsync(Car car)
{
using var db = databaseConnectionFactory.GetConnection();
var sql = @"
DECLARE @InsertedRows AS TABLE (Id int);
MERGE INTO Car AS target
USING (SELECT @Id AS Id, @Name AS Name, @Model_Year AS Model_Year, 
@Is_Deleted AS Is_Deleted, @Origin AS origin ) AS source 
ON target.Id = source.Id
WHEN MATCHED THEN 
UPDATE SET 
Name = source.Name, 
Model_Year = source.Model_Year, 
Is_Deleted = source.Is_Deleted,
Origin = source.Origin
WHEN NOT MATCHED THEN
INSERT (Name, Model_Year, Is_Deleted, Origin)
VALUES (source.Name, source.Model_Year, 
source.Is_Deleted, source.Origin)
OUTPUT inserted.Id INTO @InsertedRows
;

SELECT Id FROM @InsertedRows;
";

var newId = await db.QuerySingleOrDefaultAsync<int>(sql, car);
return newId == 0 ? car.Id : newId;
}

Rather than having an insert and an update method, we combine that logic into this upsert method. This is a common idiom for database manipulation.

Note: to make this work, be sure to fill in all the fields for a car (or at least as many as you want to have in the Database.

Delete

As noted earlier, we will implement a soft delete; that is, rather than actually removing the data from the database, we’ll just set the is_deleted column to true. This allows us to reverse the action, and make the row not-deleted by simply changing that value to false.

[HttpDelete(“{id}”)]
public async Task<IActionResult> Delete(int id)
{
try
{
await _carService.Delete(id);
}
catch (Exception e)
{
return BadRequest(e);
}
return NoContent();
}

As you would expect, the endpoint takes an id (the id of the car we want to delete). The controller then hands that off to the service, which calls the repository which, in turn, marks that id as deleted:

public async Task<int> DeleteAsync(int id)
{
   using var db = databaseConnectionFactory.GetConnection();
   var query = "UPDATE car SET Is_Deleted = 1 WHERE Id = @Id";
   return await db.ExecuteAsync(query, new { Id = id });
}

If you are comfortable with SQL none of this will be very surprising. The key walkaway is:

Summary

In this post we saw that endpoints are just URLs with (potentially) data in the body of the request. The controller handles the URL and in our case passes the id or other data to the service. The service handles the (business) logic and then delegates talking to the database to the repository.

Book

This posting is excerpted from my forthcoming book Building APIs with .NET and C# to be released next year by Packt.

Unknown's avatar

About Jesse Liberty

** Note ** Jesse is currently looking for a new position. You can learn more about him at https://jesseliberty.bio Thank you. Jesse Liberty has three decades of experience writing and delivering software projects and is the author of 2 dozen books and a couple dozen online courses. His latest book, Building APIs with .NET, is now available wherever you buy your books. Liberty was a Team Lead and Senior Software Engineer for various corporations, a Senior Technical Evangelist for Microsoft, a Distinguished Software Engineer for AT&T, a VP for Information Services for Citibank and a Software Architect for PBS. He is a 13 year Microsoft MVP.
This entry was posted in Essentials. Bookmark the permalink.

2,765 Responses to .NET APIs Part 5 – All the CRUD APIs

  1. KennethDEP's avatar KennethDEP says:

    кайтинг Безопасность в кайтсёрфинге превыше всего. Учитесь читать ветер, соблюдайте правила поведения на воде, используйте защитное снаряжение и не переоценивайте свои возможности.

  2. Stephenviaps's avatar Stephenviaps says:

    Hello everyone, it’s my first pay a visit at this website, and post is in fact fruitful in support of me, keep up posting such articles or reviews.
    http://piar.org.ua/osvitni-resursy-z-remontu-far-audi.html

  3. KennethDEP's avatar KennethDEP says:

    кайт школа Кайтсёрфинг: Скользящая элегантность по волнам, танец с ветром, требующий баланса и отваги. Освоив кайтсёрфинг, вы откроете мир свободы и адреналина.

  4. KennethDEP's avatar KennethDEP says:

    кайтсёрфинг Инструктор по кайтсерфингу: квалификация и опыт

  5. 809196 513406Giving you the most effective News is really significantly imptortant to us. 829752

  6. JamesRon's avatar JamesRon says:

    После звонка специалист клиники «ВитаЛайн» оперативно отправляется по указанному адресу и обычно прибывает в течение 30–60 минут. На месте врач сразу проводит детальную диагностику, оценивая состояние пациента: проверяет пульс, давление, сатурацию, степень интоксикации и наличие хронических болезней. На основании результатов осмотра нарколог разрабатывает индивидуальную схему терапии.
    Получить дополнительные сведения – запой нарколог на дом в новосибирске

  7. RichardElape's avatar RichardElape says:

    Для проживающих в Балашихе: услуга стационарного вывода из запоя от Частного Медика 24 — переходите по ссылке.
    Что скрывают от вас? – нарколог вывод из запоя

  8. Eugenebib's avatar Eugenebib says:

    Стоимость услуг по установке капельницы определяется индивидуально и зависит от нескольких факторов. В первую очередь, цена обусловлена тяжестью состояния пациента: при более сильной интоксикации и выраженных симптомах абстинентного синдрома может потребоваться расширенная терапия. Кроме того, итоговая сумма зависит от продолжительности запоя, так как длительное употребление спиртного ведет к более серьезному накоплению токсинов, требующему дополнительных лечебных мероприятий.
    Детальнее – http://www.domen.ru

  9. ElbertChoox's avatar ElbertChoox says:

    В Балашихе (будни и выходные): стационарный вывод из запоя в клинике Частный Медик 24 — переход по ссылке.
    Хочу знать больше – вывод из запоя на дому круглосуточно

  10. KeithCat's avatar KeithCat says:

    Затяжной запой опасен для жизни. Врачи наркологической клиники в Ростове-На-Дону проводят срочный вывод из запоя — на дому или в стационаре. Анонимно, безопасно, круглосуточно.
    Узнать больше – https://vyvod-iz-zapoya-rostov16.ru/

  11. Geralddat's avatar Geralddat says:

    В Ростове-На-Дону решение есть — наркологическая клиника. Здесь помогают людям выйти из запоя без страха и осуждения. Всё анонимно, грамотно и с заботой о каждом пациенте.
    Познакомиться с результатами исследований – вывод из запоя анонимно

  12. Donaldgat's avatar Donaldgat says:

    Стационарный вывод из запоя в Балашихе — лечение в Частном Медике 24, переходите по ссылке на страницу услуги.
    Хочешь знать всё? – вывод из запоя на дому город балашиха

  13. Melvinner's avatar Melvinner says:

    Запой – это угрожающее здоровью состояние, при котором человек утрачивает контроль над употреблением алкоголя, что приводит к накоплению токсинов в организме и может вызвать серьезные осложнения. В Уфе, столице Республики Башкортостан, опытные наркологи предоставляют услугу вызова на дом, позволяющую оперативно начать детоксикацию и стабилизировать состояние пациента в комфортной, знакомой обстановке. Такой подход обеспечивает не только быстрый вывод из запоя, но и комплексную терапию, включающую медикаментозное лечение и психологическую поддержку.
    Получить больше информации – https://narcolog-na-dom-ufa00.ru/narkolog-na-dom-kruglosutochno-ufa

  14. Normanmeaxy's avatar Normanmeaxy says:

    Когда организм на пределе, важна срочная помощь в Ростове-На-Дону — это команда опытных наркологов, которые помогут быстро и мягко выйти из запоя без вреда для здоровья.
    Переходите по ссылке ниже – наркологический вывод из запоя город ростов-на-дону

  15. Matthewaxofs's avatar Matthewaxofs says:

    Надёжная капельница от запоя в стационаре в клинике Частный Медик?24 (Коломна) — полный курс лечения, узнайте больше.
    Детальнее – капельница от запоя вызов

  16. RobertVah's avatar RobertVah says:

    Группа препаратов
    Разобраться лучше – врач на дом капельница от запоя в нижний новгороде

  17. DanielBom's avatar DanielBom says:

    После поступления вызова наш нарколог выезжает к пациенту в кратчайшие сроки, прибывая по адресу в пределах 30–60 минут. Специалист начинает процедуру с подробного осмотра и диагностики, измеряя ключевые показатели организма: артериальное давление, частоту пульса, насыщенность кислородом и собирая подробный анамнез.
    Получить дополнительные сведения – https://narcolog-na-dom-novosibirsk00.ru/narkolog-na-dom-czena-novosibirsk

  18. WilliamVag's avatar WilliamVag says:

    Когда запой превращается в острую угрозу здоровью, оперативное вмешательство становится необходимым условием для спасения жизни и предотвращения серьезных осложнений. В Уфе наркологи выезжают на дом для оказания качественной помощи при запое, предлагая детоксикацию, корректировку обменных процессов и психологическую поддержку. Такой формат лечения обеспечивает комфортную обстановку, индивидуальный подход и полную конфиденциальность для каждого пациента.
    Подробнее – https://narcolog-na-dom-ufa0.ru/narkolog-na-dom-kruglosutochno-ufa/

  19. Arthurfes's avatar Arthurfes says:

    Наши специалисты используют проверенные медикаменты, которые подбираются индивидуально для каждого пациента:
    Подробнее можно узнать тут – нарколог на дом анонимно в воронеже

  20. EduardoOntom's avatar EduardoOntom says:

    Резкий отказ от алкоголя без врачебной помощи может спровоцировать абстинентный синдром, который сопровождается судорогами, галлюцинациями, аритмией и критическими скачками артериального давления. В тяжёлых случаях состояние может осложниться алкогольным делирием (белая горячка), приступами паники, депрессией и острыми сердечно-сосудистыми расстройствами.
    Получить дополнительные сведения – нарколог вывод из запоя

  21. RichardElape's avatar RichardElape says:

    Услуга стационарного вывода из запоя от Частного Медика 24 в Балашихе — подробнее на странице предложения.
    Исследовать вопрос подробнее – https://vyvod-iz-zapoya-v-stacionare-balashiha11.ru/

  22. Gregoryket's avatar Gregoryket says:

    Затяжной запой опасен для жизни. Врачи наркологической клиники в Ростове-На-Дону проводят срочный вывод из запоя — на дому или в стационаре. Анонимно, безопасно, круглосуточно.
    Раскрыть тему полностью – вывод из запоя недорого в ростове-на-дону

  23. JamesRon's avatar JamesRon says:

    Врачи клиники «ВитаЛайн» для снятия интоксикации и облегчения состояния пациента применяют исключительно качественные и проверенные лекарственные препараты, подбирая их в зависимости от особенностей ситуации и состояния здоровья пациента:
    Детальнее – нарколог на дом анонимно новосибирск

  24. Albertescaw's avatar Albertescaw says:

    В Коломне клиника Частный Медик?24 предлагает капельницу от запоя в стационаре — подробности на сайте клиники.
    Подробнее – после капельницы от запоя

  25. HenrySuicy's avatar HenrySuicy says:

    Ищете капельницу от запоя в стационаре в Коломне? Посмотрите предложение Частного Медика?24 по ссылке.
    Получить дополнительные сведения – https://kapelnica-ot-zapoya-kolomna14.ru/

  26. EddieRaity's avatar EddieRaity says:

    Услуга стационарной капельницы от запоя от Частного Медика?24 в Коломне — ознакомьтесь на странице предложения.
    Подробнее – капельница от запоя цена коломна

  27. Charlesnup's avatar Charlesnup says:

    Первоначально врач осматривает пациента, узнаёт длительность запоя, наличие хронических заболеваний, оценивает степень интоксикации. Этот переходный момент очень важен, так как точная диагностика позволяет определить, какие препараты и инфузионные растворы будут наиболее эффективны и безопасны.
    Разобраться лучше – http://vyvod-iz-zapoya-arkhangelsk6.ru/vyvod-iz-zapoya-kruglosutochno-arkhangelsk/

  28. ShanepiliA's avatar ShanepiliA says:

    Its like you read my mind! You seem to know a lot about this, like you wrote the book in it or something. I think that you could do with a few pics to drive the message home a little bit, but instead of that, this is excellent blog. A great read. I will definitely be back.
    https://www.google.rs/url?q=https://seattlelimorates.com/

  29. MiguelAbami's avatar MiguelAbami says:

    Компоненты капельницы
    Выяснить больше – капельница от запоя на дому в красноярске

  30. TamikaFat's avatar TamikaFat says:

    Это позволяет оперативно и с высокой точностью определить степень алкогольной интоксикации, выявить наличие сопутствующих заболеваний и выбрать наиболее оптимальную и безопасную стратегию лечения, учитывающую все индивидуальные особенности конкретного пациента.
    Подробнее тут – https://vyvod-iz-zapoya-arkhangelsk66.ru/vyvod-iz-zapoya-na-domu-arkhangelsk/

  31. AlbertSig's avatar AlbertSig says:

    На основе полученных диагностических данных врач подбирает оптимальные препараты и дозировки, разрабатывая персональный план лечебных мероприятий.
    Подробнее – выезд нарколога на дом

  32. ElbertChoox's avatar ElbertChoox says:

    Услуга стационарного вывода из запоя от Частного Медика 24 в Балашихе — подробнее на странице предложения.
    Переходите по ссылке ниже – вывод из запоя цена московская область

  33. Robertwalia's avatar Robertwalia says:

    Игнорирование этих симптомов или попытки самолечения могут привести к серьезным осложнениям. Своевременная установка капельницы на дому позволяет быстро улучшить состояние пациента и минимизировать последствия запоя.
    Подробнее можно узнать тут – капельница от запоя наркология в нижний новгороде

  34. Brucesab's avatar Brucesab says:

    Комплексная терапия при выводе из запоя на дому включает в себя два основных направления: медикаментозную детоксикацию и психологическую поддержку. Такой подход позволяет добиться быстрого и устойчивого эффекта, минимизируя риск осложнений и обеспечивая долгосрочную ремиссию.
    Подробнее можно узнать тут – http://narcolog-na-dom-ufa000.ru

  35. Eugenebib's avatar Eugenebib says:

    При обращении в клинику «НаркоНет» пациенту предоставляется полный спектр мероприятий, направленных на восстановление организма после запоя. Сначала наш специалист приезжает на дом в течение 30–60 минут после вызова. На месте проводится детальный осмотр: измеряются основные жизненные показатели (давление, пульс, уровень кислорода в крови), собирается подробный анамнез и оценивается степень интоксикации. Полученные данные позволяют врачу разработать индивидуальный план лечения.
    Получить дополнительную информацию – капельница от запоя нижний новгород.

  36. KeithCat's avatar KeithCat says:

    Затяжной запой опасен для жизни. Врачи наркологической клиники в Ростове-На-Дону проводят срочный вывод из запоя — на дому или в стационаре. Анонимно, безопасно, круглосуточно.
    Не пропусти важное – вывод из запоя на дому город ростов-на-дону

  37. Geralddat's avatar Geralddat says:

    Близкий человек в запое? Не ждите ухудшения. Обратитесь в клинику — здесь проведут профессиональный вывод из запоя с последующим восстановлением организма.
    Это ещё не всё… – rostov-na-donu

  38. MichaelAbara's avatar MichaelAbara says:

    Первый этап лечения направлен на быстрый вывод токсинов, накопившихся в организме вследствие длительного употребления алкоголя. Для этого применяются современные препараты, позволяющие очистить кровь и восстановить нормальный обмен веществ.
    Исследовать вопрос подробнее – нарколог на дом вывод из запоя

  39. Larrydrila's avatar Larrydrila says:

    В «Чистом Дыхании» вы встретите врачей-наркологов, психиатров и психологов с многолетним опытом, готовых приехать на дом для первичной детоксикации или принять в стационаре для углублённой терапии. Мы соблюдаем строгие медицинские протоколы и гарантируем безопасность даже в самых тяжёлых случаях.
    Выяснить больше – http://narkologicheskaya-klinika-dolgoprudnyj3.ru/anonimnaya-narkologicheskaya-klinika-v-dolgoprudnom/

  40. EduardoOntom's avatar EduardoOntom says:

    Каждый пациент получает индивидуально разработанную схему терапии, которая включает комплексное воздействие на организм:
    Разобраться лучше – нарколог на дом вывод из запоя

  41. JamesRon's avatar JamesRon says:

    Врачи клиники «ВитаЛайн» для снятия интоксикации и облегчения состояния пациента применяют исключительно качественные и проверенные лекарственные препараты, подбирая их в зависимости от особенностей ситуации и состояния здоровья пациента:
    Подробнее – вызов врача нарколога на дом в новосибирске

  42. Melvinner's avatar Melvinner says:

    Обращение за помощью на дому имеет ряд неоспоримых преимуществ, особенно для тех, кто ценит конфиденциальность и стремится избежать дополнительных стрессовых факторов, связанных с посещением клиники:
    Узнать больше – https://narcolog-na-dom-ufa00.ru/narkolog-na-dom-kruglosutochno-ufa/

  43. Arthurfes's avatar Arthurfes says:

    После вашего звонка нарколог выезжает на дом в течение 30–60 минут. Прибыв на место, специалист проводит всесторонний медицинский осмотр, включая измерение артериального давления, пульса и уровня кислорода в крови, а также собирает анамнез для определения степени интоксикации.
    Ознакомиться с деталями – https://narcolog-na-dom-voronezh0.ru/narkolog-na-dom-anonimno-voronezh/

  44. RobertVah's avatar RobertVah says:

    Наши специалисты используют проверенные и сертифицированные медикаменты, которые подбираются индивидуально для каждого пациента:
    Подробнее можно узнать тут – https://kapelnica-ot-zapoya-nizhniy-novgorod00.ru/kapelnicza-ot-zapoya-na-domu-nizhnij-novgorod/

  45. WilliamVag's avatar WilliamVag says:

    Современные методы лечения при выводе из запоя включают как медикаментозную детоксикацию, так и психологическую реабилитацию. В Уфе наркологи используют капельничное введение лекарственных средств, которые помогают быстро вывести токсины, нормализовать обмен веществ и стабилизировать работу внутренних органов. Одновременно с этим проводится психологическая поддержка для снижения эмоционального стресса, связанного с запоем.
    Подробнее тут – https://narcolog-na-dom-ufa0.ru/narkolog-na-dom-kruglosutochno-ufa

  46. Normanmeaxy's avatar Normanmeaxy says:

    Каждый день запоя увеличивает риск для жизни. Не рискуйте — специалисты в Ростове-На-Дону приедут на дом и окажут экстренную помощь. Без боли, стресса и ожидания.
    Дополнительно читайте здесь – вывод из запоя на дому круглосуточно город ростов-на-дону

  47. Michaelwem's avatar Michaelwem says:

    Первым шагом является детоксикация организма от токсинов, накопившихся вследствие длительного злоупотребления алкоголем. Врач назначает внутривенные капельницы и препараты, способствующие быстрому выведению алкоголя и стабилизации работы внутренних органов. Такой метод позволяет значительно снизить риск осложнений и ускорить процесс восстановления.
    Узнать больше – http://narcolog-na-dom-v-irkutske66.ru/vrach-narkolog-na-dom-irkutsk/

  48. Gregoryket's avatar Gregoryket says:

    Затяжной запой опасен для жизни. Врачи наркологической клиники в Ростове-На-Дону проводят срочный вывод из запоя — на дому или в стационаре. Анонимно, безопасно, круглосуточно.
    Дополнительно читайте здесь – вывод из запоя на дому круглосуточно город ростов-на-дону

  49. Richardwes's avatar Richardwes says:

    Обращение за наркологической помощью на дому требуется в случаях, когда состояние пациента не позволяет ему самостоятельно посетить клинику или есть необходимость в анонимном лечении.
    Детальнее – платный нарколог на дом

  50. OLanepiliA's avatar OLanepiliA says:

    Lopesan Costa Bavaro Airport Shuttle

    The Lopesan Costa Bavaro Airport Shuttle is a private, direct transfer for groups of up to six, ensuring no stops or delays with other passengers.

    Distance from Lopesan Costa Bavaro Resort to Punta Cana Airport

    How far is Lopesan Costa Bavaro from airport? lopesan costa bavaro to airport The Lopesan Costa Bavaro Resort, Spa & Casino is approximately 10.9 miles (18 km) from Punta Cana International Airport (PUJ). The drive typically takes about 17-30 minutes, depending on traffic conditions.

Leave a Reply

Your email address will not be published. Required fields are marked *