#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
конечные точки
Вы должны определить следующее:
- Получить, который совпадал бы с
// GET: api/CoinJar
- Получить идентификатор, который будет совпадать с
// GET: api/CoinJar/5
- Сообщение, которое совпадало бы с
// POST: api/CoinJar/
и должно использоваться для вставки новыхCoinJar
элементов - Поместите, который будет совпадать с
// PUT: api/CoinJar/
и его следует использовать для обновленияCoinJar
элементов - Удалить, которое совпадало бы с
// DELETE: api/CoinJar/
и должно использоваться для удаленияCoinJar
элементов
Теперь, в зависимости от того, следует ли считать монету самостоятельным ресурсом, тогда вы можете объявить следующее
- GetCoin, который будет
// GET: api/CoinJar/{id}/Coin/
- GetCoin, который будет
// GET: api/CoinJar/{id}/Coin/{CoinId}
- PostCoin, который будет тем
// POST: api/CoinJar/{id}/Coin/{CoinId}
, который вставит новую монету в CoinJar и т. Д
Вы также можете использовать PUT
версию CoinJar
, чтобы просто обновить (добавить / сбросить и т. Д.) Монеты за один раз. Все зависит от ваших потребностей.
Контроллеры для простого взаимодействия
Вся ваша логика и интерфейсы должны использоваться на другом уровне, бизнес-уровне. Таким образом, вы можете реализовать свои интерфейсы и использовать их соответствующим образом со своих контроллеров или любого другого клиента.
Ознакомьтесь с этими отличными рекомендациями по api от Microsoft для получения дополнительной информации о дизайне.
Комментарии:
1. другими словами, я должен иметь все это в контроллере, не обязательно иметь интерфейс.?
2. Причина, по которой я поднял вопрос, я хочу, чтобы это принимало последнюю чеканку и объем 0f 42 жидких унций. счетчик, чтобы отслеживать общую сумму собранных денег, сбросьте bac до $ 0.00
3. Вашему контроллеру не нужно реализовывать интерфейс. Я бы использовал a
CoinJarRepository
, который реализует интерфейс, и использовал бы его для поддержания моей настойчивости.4. Не забудьте проголосовать / принять полезные ответы! Приветствия!