Afzaal Ahmad Zeeshan
Цитата:
Я искал разницу между WebApi и WEF REST, и почти в каждой статье я обнаружил, что WebApi легче, чем WCF REST, но ни один из них не сказал "почему".
Я расскажу вам о том," почему " часть их постов и повышенный интерес к этому вопросу мотивирует меня написать статью, охватывающую большинство частей, где ASP.NET веб-API кажется хорошим подходом по сравнению с использованием веб-сервисов WCF framework.
Цитата:
Насколько я понимаю (очень мало знаний), оба работают по протоколу HTTP и могут возвращать данные JSON (предполагается, что они легче XML). Если тип протокола и вернуть данные одинаковы по значению, чем то, что делают WebApit легче?
Говоря об этой части, WCF работает на нескольких протоколах, а не только на REST API или HTTP-протоколе. Это преимущество WCF над ASP.NET веб-API, поскольку он может общаться практически в любом протоколе,он может пойти на один шаг глубже, чем HTTP — в протоколе TCP. JSON на самом деле намного легче XML, я говорю об этом понятии в своей статье,
От нуля до героя в JSON с C#[
^].
Теперь переходим к вашему вопросу: главный фактор, делающий веб-API ASP.NET легче, чем платформа WCF, заключается в том, что большинство библиотек, необходимых для запуска веб-API, уже работают в самой платформе ASP.NET. Так что, если вы сравните общее использование ресурсов, разница будет небольшой (или не будет) вообще. Веб-API ASP.NET использует ASP.NET MVC для запуска и выполнения того, что вам нужно. WCF, с другой стороны, представляет собой полную структуру (как и ASP.NET), и тогда для работы потребуются полные ресурсы, и вы полагаете, что он потребляет больше ресурсов. Веб-API - это просто обработчик одного (или нескольких) URL-адресов в определенном доменном имени и запускается только по запросу.
Во-вторых, большинство программистов также должны говорить о легком коде, который будет написан. Это совершенно то место, где ASP.NET веб-API убивает использование WCF на всех этапах. Код для одного CRUD-контроллера API выглядит следующим образом,
[Route("api/tickets")]
public class TicketsApiController : ApiController {
public List<ticket> GetTickets() {
return Model.GetAllTickets();
}
[HttpGet]
[Route("{id}")]
public Ticket GetTicket(int id) {
return Model.GetAllTickets().Where(x => x.Id == id).FirstOrDefault();
}
[HttpPost]
public void SaveTicket([FromBody] Ticket ticket) {
if(ticket != null) {
Model.Add(ticket);
}
}
[HttpPut]
public void UpdateTicket(int id, [FromBody] Ticket ticket) {
if(ticket != null && !(id < 0)) {
Model.UpdateTicket(id, ticket);
}
}
[HttpDelete]
public void DeleteTicket(int id) {
Model.Remove(Model.Find(x => x.Id == id));
}
}
</ticket>
Это код, который я написал прямо сейчас, менее чем за 5 минут, и он будет работать-при условии, что мой
Model
объект отлично работает и справляется с большинством вещей.
В случае WCF вы не можете этого сделать. Вы должны управлять клиентами и другими подобными вещами, контрактами и т. д. Это то, что вызывает много путаницы. В приведенном выше коде вы можете видеть, что я предоставил фреймворку все, например, местоположение, к которому он будет иметь доступ, http-глаголы, которые должны обрабатываться какой функцией и как значения должны быть сопоставлены, и так далее.
Вот некоторые из тех "Почему", которые люди (включая и особенно меня) предпочитают использовать ASP.NET веб-API через WCF.