.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. Lavernehew's avatar Lavernehew says:

    Вывод из запоя на дому в Санкт-Петербурге с выездом нарколога, детоксикацией и восстановлением состояния в наркологической клинике «Частный медик 24»
    Детальнее – анонимный вывод из запоя на дому

  2. VictorEnash's avatar VictorEnash says:

    Клиника создана как современное пространство для безопасного восстановления. Здесь пациенты получают комплексную помощь в комфортных условиях. Основные преимущества учреждения:
    Получить больше информации – наркологическая клиника клиника помощь

  3. Charleskar's avatar Charleskar says:

    Главный принцип работы наркологической клиники — это последовательность, безопасность и уважение к каждому пациенту. Независимо от степени зависимости, лечение строится на тщательной диагностике, определении индивидуальных особенностей и поэтапном подходе. Медицинская помощь оказывается как в условиях стационара, так и на дому, где врачи могут провести детоксикацию, стабилизировать состояние и составить дальнейший план терапии.
    Выяснить больше – платная наркологическая клиника в ростове-на-дону

  4. RonaldDOR's avatar RonaldDOR says:

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

  5. RobertphEra's avatar RobertphEra says:

    Каждый метод выбирается строго по показаниям. При необходимости врачи комбинируют медикаментозное лечение с психотерапией, физиопроцедурами и восстановительными программами. Это обеспечивает максимальную эффективность и безопасность терапии.
    Детальнее – наркологическая клиника стационар хабаровск

  6. GarlandFar's avatar GarlandFar says:

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

  7. MarvinJarce's avatar MarvinJarce says:

    Easy Canada Meds Easy Canada Meds Easy Canada Meds

  8. CharlesTop's avatar CharlesTop says:

    Нарколог на дом в Екатеринбурге: выезд врача на дом, лечение запоя и консультации в наркологической клинике «НЕО+».
    Изучить вопрос глубже – вызвать нарколога на дом в екатеринбурге

  9. Jorgefouts's avatar Jorgefouts says:

    Такие состояния требуют медицинского вмешательства, поскольку могут ухудшаться без лечения. Капельница позволяет стабилизировать состояние и снизить нагрузку на организм. Услуги могут предоставляться анонимно, а при тяжёлых случаях рассматривается лечение в стационаре.
    Ознакомиться с деталями – капельница от похмелья на дому в воронеже

  10. RobertMen's avatar RobertMen says:

    https://easyindiameds.com/# world pharmacy india

  11. Stephenviaps's avatar Stephenviaps says:

    For hottest news you have to pay a visit world-wide-web and on web I found this web page as a best site for hottest updates.
    sweepstakes casinos

  12. Bennyter's avatar Bennyter says:

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

  13. GichardAmomi's avatar GichardAmomi says:

    Hi i am kavin, its my first time to commenting anyplace, when i read this piece of writing i thought i could also create comment due to this sensible piece of writing.
    list of sweepstakes casinos usa

  14. Charleschait's avatar Charleschait says:

    Затяжной запой — это не бытовая слабость, а медицинское состояние, требующее профессионального лечения в условиях стационара. Когда организм истощен длительной интоксикацией, нарушен сон, отсутствует аппетит, а попытки самостоятельно прекратить употребление сопровождаются тремором, тревогой и скачками давления, единственным безопасным решением становится контролируемая детоксикация. Наркологическая клиника «Элегия Мед» в Санкт-Петербурге предоставляет профессиональное лечение с применением сертифицированных протоколов, непрерывный контроль состояния пациента и индивидуальный подбор медикаментозной поддержки. Мы работаем круглосуточно, обеспечивая быстрое реагирование на обращения, четкую диагностику при поступлении и прозрачное взаимодействие с родственниками. Все процедуры выполняются с соблюдением протоколов доказательной медицины, стандартов Минздрава РФ и строгих правил конфиденциальности. Первичная оценка состояния начинается с дистанционной консультации, что позволяет врачам заранее подготовить необходимое оборудование и скорректировать план госпитализации еще до прибытия пациента. При необходимости заказать консультацию или оформить выезд бригады, доступные способы связи включают телефон, мессенджеры и онлайн-форму на сайте.
    Подробнее тут – наркология вывод из запоя в стационаре в санкт-петербурге

  15. Williamfub's avatar Williamfub says:

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

  16. PatrickOxync's avatar PatrickOxync says:

    Полученные данные формируют основу для выбора лечебной тактики и определения оптимального формата помощи.
    Исследовать вопрос подробнее – https://narkologicheskaya-klinika-v-tolyatti0.ru/narkologicheskaya-bolnicza-tolyatti/

  17. Michaeldut's avatar Michaeldut says:

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

  18. demo akun's avatar demo akun says:

    Someone in the chat called Dragon Hatch 2 “the only honest one” — half joking, half not.

  19. GarlandFar's avatar GarlandFar says:

    Лечение запойного состояния строится на сочетании детоксикационных и поддерживающих мероприятий. Основная задача терапии заключается в снижении концентрации токсинов и восстановлении нарушенных регуляторных механизмов. При этом особое внимание уделяется сохранению стабильности внутренних систем организма.
    Получить больше информации – https://vyvod-iz-zapoya-khabarovsk0.ru/vyvod-iz-zapoya-v-staczionare-khabarovsk/

  20. jili slot's avatar jili slot says:

    Today, I went to the beach with my children. I found a sea shell and gave it to my 4 year old daughter and said “You can hear the ocean if you put this to your ear.” She placed the shell to her ear and screamed. There was a hermit crab inside and it pinched her ear. She never wants to go back! LoL I know this is totally off topic but I had to tell someone!

  21. ThomasMox's avatar ThomasMox says:

    canadian drugs pharmacy: Easy Canada Meds – Easy Canada Meds

  22. RichardMut's avatar RichardMut says:

    Затяжной запой — это не бытовая слабость, а медицинское состояние, требующее профессионального вмешательства. Когда организм истощен длительной интоксикацией, нарушен сон, отсутствует аппетит, а попытки самостоятельно прекратить употребление сопровождаются тремором, тревогой и скачками давления, единственным безопасным решением становится стационарная детоксикация. Наркологическая клиника «Элегия Мед» в Санкт-Петербурге предоставляет безопасную детоксикацию, индивидуальную медикаментозную терапию и всестороннюю поддержку специалистов на всех этапах восстановления. Мы работаем круглосуточно, обеспечивая быстрое реагирование на обращения, четкую диагностику при поступлении и прозрачное взаимодействие с родственниками. Все процедуры выполняются с соблюдением протоколов доказательной медицины, стандартов Минздрава РФ и строгих правил конфиденциальности. Первичная оценка состояния начинается с дистанционной консультации, что позволяет врачам заранее подготовить необходимое оборудование и скорректировать план госпитализации еще до прибытия пациента. При необходимости позвонить на горячую линию или оформить вызов бригады, помощь доступна в любое время суток.
    Исследовать вопрос подробнее – вывод из запоя в стационаре в санкт-петербурге

  23. Your means of telling all in this post is actually pleasant, every one can without difficulty know it, Thanks a lot.

  24. winph's avatar winph says:

    We stumbled over here different web page and thought I might as well check things out. I like what I see so now i’m following you. Look forward to going over your web page repeatedly.

  25. Roberttip's avatar Roberttip says:

    Детоксикация — это медицинская стабилизация при интоксикации и тяжёлой отмене. Она помогает снизить нагрузку на организм, скорректировать обезвоживание и водно-электролитные нарушения, уменьшить выраженность тремора, потливости, тошноты, стабилизировать давление и пульс, снизить тревогу и восстановить сон. Но важно понимать границы результата: после длительного запоя организм не восстанавливается мгновенно, слабость и эмоциональная неустойчивость могут сохраняться в первые сутки.
    Подробнее можно узнать тут – https://narkologicheskaya-klinika-orekhovo-zuevo12.ru/narkologicheskaya-klinika-sajt-v-orekhovo-zuevo/

  26. ShaneHok's avatar ShaneHok says:

    Такой подход позволяет врачу контролировать каждый шаг процесса, фиксировать динамику и при необходимости корректировать терапию. Постоянное наблюдение и своевременная поддержка делают лечение эффективным и безопасным для пациента.
    Подробнее можно узнать тут – narkologicheskaya-klinika-tolyatti0.ru/

  27. EnriqueGinoB's avatar EnriqueGinoB says:

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

  28. Your article helped me a lot, is there any more related content? Thanks! https://www.binance.info/register?ref=IHJUI7TF

  29. sa影视's avatar sa影视 says:

    未来世界黑客争斗,科技边缘的道德难题,黑客

  30. Please let me know if you’re looking for a author for your weblog. You have some really great articles and I believe I would be a good asset. If you ever want to take some of the load off, I’d really like to write some articles for your blog in exchange for a link back to mine. Please blast me an e-mail if interested. Many thanks!

  31. DichaelAlono's avatar DichaelAlono says:

    This is really interesting, You are a very skilled blogger. I’ve joined your feed and look forward to seeking more of your magnificent post. Also, I have shared your site in my social networks!
    путин пидорас

  32. RobertMen's avatar RobertMen says:

    http://easycanadameds.com/# canadapharmacyonline legit

  33. JasonSex's avatar JasonSex says:

    Качественная наркологическая помощь строится от безопасности к устойчивости. Сначала врач оценивает состояние: длительность употребления, выраженность интоксикации и отмены, давление и пульс, признаки обезвоживания, характер сна, уровень тревоги, наличие хронических заболеваний и препаратов, которые уже принимались дома. Затем выбирается формат лечения — стационарный, амбулаторный или выездной — исходя из рисков, а не из удобства. Это принципиально: при нестабильных показателях и высокой вероятности осложнений требуется более высокий уровень контроля.
    Углубиться в тему – http://narkologicheskaya-klinika-sergiev-posad12.ru

  34. Hi there! This post couldn’t be written any better! Reading through this post reminds me of my old room mate! He always kept chatting about this. I will forward this write-up to him. Pretty sure he will have a good read. Thank you for sharing!

  35. Jeremywisse's avatar Jeremywisse says:

    Easy Canada Meds: Easy Canada Meds – canadian pharmacy india

  36. What i don’t understood is in truth how you are not actually much more well-liked than you might be right now. You’re very intelligent. You recognize thus significantly when it comes to this matter, made me for my part imagine it from a lot of varied angles. Its like men and women aren’t involved unless it’s one thing to accomplish with Girl gaga! Your own stuffs nice. Always care for it up!

  37. I think the admin of this web page is genuinely working hard for his web page, since here every stuff is quality based stuff.

  38. I do not know whether it’s just me or if everyone else encountering issues with your blog. It appears as if some of the text in your content are running off the screen. Can somebody else please comment and let me know if this is happening to them too? This might be a issue with my web browser because I’ve had this happen before. Many thanks

  39. Spot on with this write-up, I seriously believe this amazing site needs a great deal more attention. I’ll probably be back again to see more, thanks for the info!

  40. Timsothybioli's avatar Timsothybioli says:

    Hi! I’m at work browsing your blog from my new iphone 4! Just wanted to say I love reading through your blog and look forward to all your posts! Carry on the fantastic work!
    kasiino tervitusboonus

  41. 10bet's avatar 10bet says:

    Wow! After all I got a webpage from where I be able to really get helpful information regarding my study and knowledge.

  42. ThomasMox's avatar ThomasMox says:

    best india pharmacy: india pharmacy – pharmacy no prescription required

  43. mexplay's avatar mexplay says:

    Hello everyone, it’s my first visit at this site, and paragraph is in fact fruitful in favor of me, keep up posting such content.

  44. Thomasneusy's avatar Thomasneusy says:

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

  45. JamesKicle's avatar JamesKicle says:

    Качественная наркологическая помощь строится от безопасности к устойчивости. Сначала врач оценивает состояние: длительность употребления, выраженность интоксикации и отмены, давление и пульс, признаки обезвоживания, характер сна, уровень тревоги, наличие хронических заболеваний и препаратов, которые уже принимались дома. Затем выбирается формат лечения — стационарный, амбулаторный или выездной — исходя из рисков, а не из удобства. Это принципиально: при нестабильных показателях и высокой вероятности осложнений требуется более высокий уровень контроля.
    Подробнее – https://narkologicheskaya-klinika-sergiev-posad12.ru/platnaya-narkologicheskaya-klinika-v-sergievom-posade/

  46. you’re in point of fact a excellent webmaster. The website loading velocity is amazing. It seems that you are doing any unique trick. Moreover, The contents are masterwork. you have done a wonderful job on this subject!

  47. Michaelvieft's avatar Michaelvieft says:

    Когда зависимость начинает управлять распорядком и решениями, важно получить помощь, которая строится на медицинской оценке, а не на общих обещаниях. В условиях мегаполиса люди часто тянут до последнего: пытаются «перетерпеть», закрывают симптомы таблетками, откладывают визит из-за работы и семьи. В итоге острый период только усиливается: растут тревога и бессонница, скачет давление, появляется тремор, нарушается дыхание, усиливаются панические реакции. Наркологическая клиника нужна не для формальности, а для того, чтобы снять непосредственные риски и затем выстроить план лечения зависимости так, чтобы не возвращаться к той же точке через несколько дней или недель. В клинике «Свет Баланса» акцент делается на двух вещах: безопасность в остром состоянии и понятная дорожная карта восстановления после стабилизации.
    Получить дополнительные сведения – narkologicheskaya-klinika

  48. colorplay's avatar colorplay says:

    Hey! This is my 1st comment here so I just wanted to give a quick shout out and tell you I genuinely enjoy reading your blog posts. Can you suggest any other blogs/websites/forums that cover the same topics? Thanks a ton!

Leave a Reply

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