Web应用与Web API的区别是什么?

22

听起来很幼稚,但是当有人在论文中提到时,网络应用程序和Web API有多不同?它们的功能有何不同?


2
大多数Web应用程序返回视图和数据,但Web API用于创建完整的HTTP服务,以简单易用的方式仅返回数据而不是视图。 - Nkosi
7个回答

25
非常简单:Web应用程序是一个网站,在浏览器中看到的,而Web API是一种服务,在Web应用程序中使用的。
另请参见ASP.NET MVC和ASP.NET Web API之间的区别
引用: “ Asp.Net MVC用于创建返回视图和数据的Web应用程序,而Asp.Net Web API用于创建完整的HTTP服务,并以简单易用的方式仅返回数据,而不返回视图。”

那么,如果我已经创建了Asp.Net Web API解决方案,如何将网站创建为单独的客户端呢?Visual Studio是否支持作为客户端应用程序(网站或者说网页)的项目模板? - swcraft
@JP_medevice,没有这样的项目模板,Web API可以用于不同的应用程序,例如:ASP.NET、HTML/JavaScript、移动应用和甚至桌面应用。 - Alexan

13

Web应用:

它是用户的端到端解决方案。这意味着用户可以:

  • 使用浏览器打开
  • 与之交互。用户可以单击某些内容,经过一些处理后,其结果将反映在浏览器屏幕上。人机交互

Web API

仅使用Web API,用户无法与其交互,因为它仅返回数据,而不是视图。

  • 它是一个与另一个系统交互的系统
  • 它不返回视图,只返回数据
  • 它有一个端点集,可以被其他系统访问以获取它提供的数据。

使用类比进行解释

Web应用:

假设我们有一个厨师。我们可以随时要求他给我们煮任何食物!假设我们要求我们的厨师给我们煮个汉堡包。他会处理我们的请求并提供给我们一个汉堡包。(这就像一个Web应用程序;一个完整的解决方案。)

Web API

现在,如果我们要求他制作“麦当劳”的汉堡包,他能否烹饪并给我们带来那个?不行!这就是API的概念!(对于此示例,假设麦当劳只向厨师提供外卖)

麦当劳外卖就像一个API。它允许其他系统(厨师)访问并返回所需的数据。因此,我们可以要求我们的解决方案(我们的厨师)去

  • 去麦当劳外卖点
  • 购买汉堡包并把它带回来
所发生的事情是,我们要求我们的“系统”与这个麦当劳外卖(API系统)交流,并带回我们需要的结果。

这是一个非常棒的比喻,解释清晰明了。干得好,兄弟... - Ulugbek
非常精确的解释! - Prasan Dutt

12

Web应用程序旨在通过视图进行人机交互,而Web API(又称Web服务)旨在进行系统间交互(以编程方式交换信息)。它们交换数据。


2

Web应用程序是在您的浏览器中运行的网站,而Web API是服务。


1
Web API是后端应用程序(服务器端),实际功能通过调用服务/数据库来存储和检索数据。

Web应用程序是前端应用程序(客户端),它调用Web API来呈现从后端检索的数据。

例如:在您的移动银行应用程序中查看账户余额,您可以在前端看到您的帐户详细信息。但所有的利息/余额计算都发生在后端。


0
简单来说,Web应用程序对请求的响应是HTML、CSS、JavaScript和任何浏览器可以呈现(图形化)的内容,而Web API返回非图形化的“数据”。话虽如此,我认为我们可以让Web API像Web应用程序一样工作,因为HTML仍然是数据。

-2
Create :

    public IHttpActionResult GetAllProduct()
        {
            IList<product> pro = null;

            using (var ctx = new TestMVCEntities())
            {
                pro = ctx.products.ToList();


            }

            if (pro.Count == 0)
            {
                return NotFound();
            }

            return Ok(pro);
        }

        public IHttpActionResult PostNewProduct(product pro)
        {

            using (var ctx = new TestMVCEntities())
            {

                ctx.InUPProduct(pro.pid,pro.pname,pro.pprice);

                ctx.SaveChanges();
            }

            return Ok();
        }

        public IHttpActionResult PutOldProduct(product pro)
        {

            using (var ctx = new TestMVCEntities())
            {

                product c = (from x in ctx.products
                              where x.pid == pro.pid
                              select x).First();

                if (c != null)
                {
                    c.pname = pro.pname;
                    c.pprice = pro.pprice;
                    ctx.SaveChanges();
                }
                else
                {
                    return NotFound();
                }
            }

            return Ok();
        }

        public IHttpActionResult Delete(int id)
        {

            using (var ctx = new TestMVCEntities())
            {
                var pro = ctx.products
                    .Where(s => s.pid == id)
                    .FirstOrDefault();

                ctx.Entry(pro).State = System.Data.Entity.EntityState.Deleted;
                ctx.SaveChanges();
            }

            return Ok();
        }




Consume :

  public JsonResult GetProductsData()
        {
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://localhost:44350/api/");
                //HTTP GET
                var responseTask = client.GetAsync("product");
                responseTask.Wait();

                var result = responseTask.Result;
                if (result.IsSuccessStatusCode)
                {
                    var readTask = result.Content.ReadAsAsync<IList<product>>();
                    readTask.Wait();

                    var alldata = readTask.Result;

                    var rsproduct = from x in alldata
                                 select new[]
                                 {
                                 Convert.ToString(x.pid),
                                 Convert.ToString(x.pname),
                                 Convert.ToString(x.pprice),
                                 Convert.ToString(x.pimage),
                                 Convert.ToString(x.pisdemand),
                                 Convert.ToString(x.pcname),
                                 Convert.ToString(x.psupply)

                          };

                    return Json(new
                    {
                        aaData = rsproduct
                    },
        JsonRequestBehavior.AllowGet);


                }
                else //web api sent error response 
                {

                   var pro = Enumerable.Empty<product>();


                    return Json(new
                    {
                        aaData = pro
                    },
        JsonRequestBehavior.AllowGet);


                }
            }
        }

        public JsonResult InupProduct(string id,string pname, string pprice)
        {
            try
            {



                product obj = new product
                {
                    pid = Convert.ToInt32(id),
                    pname = pname,
                    pprice = Convert.ToDecimal(pprice)
                };



                using (var client = new HttpClient())
                {
                    client.BaseAddress = new Uri("http://localhost:44350/api/product");

                    //HTTP POST
                    var postTask = client.PostAsJsonAsync<product>("product", obj);
                    postTask.Wait();

                    var result = postTask.Result;
                    if (result.IsSuccessStatusCode)
                    {
                        return Json(1, JsonRequestBehavior.AllowGet);
                    }
                    else
                    {
                        return Json(0, JsonRequestBehavior.AllowGet);
                    }
                }


                /*context.InUPProduct(Convert.ToInt32(id),pname,Convert.ToDecimal(pprice));

                return Json(1, JsonRequestBehavior.AllowGet);*/
            }
            catch (Exception ex)
            {
                return Json(0, JsonRequestBehavior.AllowGet);
            }

        }

        public JsonResult deleteRecord(int ID)
        {
            try
            {
                using (var client = new HttpClient())
                {
                    client.BaseAddress = new Uri("http://localhost:44350/api/product");

                    //HTTP DELETE
                    var deleteTask = client.DeleteAsync("product/" + ID);
                    deleteTask.Wait();

                    var result = deleteTask.Result;
                    if (result.IsSuccessStatusCode)
                    {

                        return Json(1, JsonRequestBehavior.AllowGet);
                    }
                    else
                    {
                        return Json(0, JsonRequestBehavior.AllowGet);
                    }
                }



               /* var data = context.products.Where(x => x.pid == ID).FirstOrDefault();
                context.products.Remove(data);
                context.SaveChanges();
                return Json(1, JsonRequestBehavior.AllowGet);*/
            }
            catch (Exception ex)
            {
                return Json(0, JsonRequestBehavior.AllowGet);
            }
        }

你是不是把这个提交到了错误的问题? - Chris O'Brien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接