Как предоставить 3 конечные точки в веб-сервисах C #?

#c# #asp.net-mvc #api #swagger

#c# #asp.net-mvc #API #развязность

Вопрос:

Я хочу выставить 3 конечные точки («Добавить в монету», «Получить общее количество монет», «Сбросить монеты»), но я затрудняюсь, следует ли выполнять эту реализацию на стороне контроллера, потому что у меня есть интерфейс, нужна помощь, и пока это моя логика.

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CoinJarAPI.Interface
{
    interface ICoinJar
    {
        void AddCoin(ICoin coin);
        decimal GetTotalAmount();
        void Reset();
    }

    public interface ICoin
    {
        decimal Amount { get; set; }
        decimal Volume { get; set; }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

using CoinJarAPI.Models;

namespace CoinJarAPI.Controllers
{
    public class CoinJarController : ApiController
    {
        // GET: api/CoinJar
        public IEnumerable<CoinJarModel> Get()
        {
            var coinJarList = new List<CoinJarModel>();
            for (int i = 0; i < 10; i  )
            {
                var coinjarModel = new CoinJarModel
                {
                    // volume, Amount, GetTotalAmount.
                };
            }
            return coinJarList;
        }

        // GET: api/CoinJar/5
        public string Get(int id)
        {
            return "value";
        }

    }
}
  

Комментарии:

1. Вы должны предоставить 3 метода в вашем контроллере API, и каждый метод может запрашивать соответствующий реализованный метод класса (который реализует ваш интерфейс).

Ответ №1:

Зависит от того, чему вы хотите следовать. Если ваша реализация является чистой 100% rest, то:

CoinJarController конечные точки

Вы должны определить следующее:

  1. Получить, который совпадал бы с // GET: api/CoinJar
  2. Получить идентификатор, который будет совпадать с // GET: api/CoinJar/5
  3. Сообщение, которое совпадало бы с // POST: api/CoinJar/ и должно использоваться для вставки новых CoinJar элементов
  4. Поместите, который будет совпадать с // PUT: api/CoinJar/ и его следует использовать для обновления CoinJar элементов
  5. Удалить, которое совпадало бы с // DELETE: api/CoinJar/ и должно использоваться для удаления CoinJar элементов

Теперь, в зависимости от того, следует ли считать монету самостоятельным ресурсом, тогда вы можете объявить следующее

  1. GetCoin, который будет // GET: api/CoinJar/{id}/Coin/
  2. GetCoin, который будет // GET: api/CoinJar/{id}/Coin/{CoinId}
  3. PostCoin, который будет тем // POST: api/CoinJar/{id}/Coin/{CoinId} , который вставит новую монету в CoinJar и т. Д

Вы также можете использовать PUT версию CoinJar , чтобы просто обновить (добавить / сбросить и т. Д.) Монеты за один раз. Все зависит от ваших потребностей.

Контроллеры для простого взаимодействия

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

Ознакомьтесь с этими отличными рекомендациями по api от Microsoft для получения дополнительной информации о дизайне.

Комментарии:

1. другими словами, я должен иметь все это в контроллере, не обязательно иметь интерфейс.?

2. Причина, по которой я поднял вопрос, я хочу, чтобы это принимало последнюю чеканку и объем 0f 42 жидких унций. счетчик, чтобы отслеживать общую сумму собранных денег, сбросьте bac до $ 0.00

3. Вашему контроллеру не нужно реализовывать интерфейс. Я бы использовал a CoinJarRepository , который реализует интерфейс, и использовал бы его для поддержания моей настойчивости.

4. Не забудьте проголосовать / принять полезные ответы! Приветствия!