iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 21
0
自我挑戰組

C# 從入門到WebApi系列 第 21

[Day21] WebApi 成員介紹 與 網路交換格式

  • 分享至 

  • xImage
  •  

來介紹下昨天的專案吧

首先打開昨天的專案
我們來看看右手邊的方案總管
https://ithelp.ithome.com.tw/upload/images/20200921/20109549PiKZqAmLpL.png

我們由下往上介紹
WeatherForecast.cs

裡面實際上就是一個只有public 屬性的Model
這個檔案是範本所建立的(我之後會刪掉)
裡面有一行

public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);

意思是TemperatureF這個屬性是TemperatureC / 0.5556
而且他是唯讀的
(忽然想到get set的坑還沒補)

通常我們習慣將專案的Model類別集中放在一個資料夾Model中
https://ithelp.ithome.com.tw/upload/images/20200921/201095499sN3qOZIhi.png

startup.cs

public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }

仔細看它主要是由兩個方法所組成

public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
        }

這個方法主要是將你所要使用的服務註冊到容器中
這個方法只會被執行一次
我們在SOLID中有講過DIP(依賴倒置原則)
裡面的範例並不能真正的達成DIP
因為總歸還是得要靠New
因此我們需要透過DI(依賴注入)與IoC(控制反轉)實作
詳細請參閱控制反轉 (IoC) 與 依賴注入 (DI)

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //Code
}

這個方法主要是用來設定Request進來的pipline
我在這次文章中除了調整路由
基本上不會用他

想了解中介層跟pipline可以參閱https://ithelp.ithome.com.tw/articles/10238047

Program.cs

public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }

跟主控台應用程式一樣
程式的進入點是Main

public static IHostBuilder CreateHostBuilder(string[] args)

透過這個方法去設定專案所要執行的Startup

CreateHostBuilder(args).Build().Run();

然後透過.Run()來執行

appsetting.json

用來放一些設定

Controller 資料夾
裡面放放Controller

我們先來解釋什麼是Controller
Controller
負責處理資料流程
每一個針對應用程式的請求
都是通過控制器自由地選擇合適的方式來處理的

WeatherForecastController.cs
就是上述所說的控制器
我們執行專案
可以看見網址是https://localhost:44304/weatherforecast
後半段的weatherforecast就是控制器的名稱

剩下的property中放的專案的啟動設定檔launchSetting.json

網路資料交換格式

這邊主要介紹3種

1.Html

超文本標記語言
你所看見的網頁都是由這種文檔所編寫而成

在過去整頁式刷新的網頁中從api端送整份html過去比較常見
現在幾乎都走輕量化

2.XML

可擴充套件標記語言(Extensible Markup Language,簡稱XML)
是一種標記語言

長的大概像

<?xml version="1.0"?>
<nutrition>
<daily-values>
	<total-fat units="g">65</total-fat>
	<saturated-fat units="g">20</saturated-fat>
	<cholesterol units="mg">300</cholesterol>
	<sodium units="mg">2400</sodium>
	<carb units="g">300</carb>
	<fiber units="g">25</fiber>
	<protein units="g">50</protein>
</daily-values>
<food>
	<name>Avocado Dip</name>
	<mfr>Sunnydale</mfr>
	<serving units="g">29</serving>
	<calories total="110" fat="100"/>
	<total-fat>11</total-fat>
	<saturated-fat>3</saturated-fat>
	<cholesterol>5</cholesterol>
	<sodium>210</sodium>
	<carb>2</carb>
	<fiber>0</fiber>
	<protein>1</protein>
	<vitamins>
		<a>0</a>
		<c>0</c>
	</vitamins>
	<minerals>
		<ca>0</ca>
		<fe>0</fe>
	</minerals>
</food>
<food>
	<name>Bagels, New York Style </name>
	<mfr>Thompson</mfr>
	<serving units="g">104</serving>
	<calories total="300" fat="35"/>
	<total-fat>4</total-fat>
	<saturated-fat>1</saturated-fat>
	<cholesterol>0</cholesterol>
	<sodium>510</sodium>
	<carb>54</carb>
	<fiber>3</fiber>
	<protein>11</protein>
	<vitamins>
		<a>0</a>
		<c>0</c>
	</vitamins>
	<minerals>
		<ca>8</ca>
		<fe>20</fe>
	</minerals>
</food>

3.json

JSON(JavaScript Object Notation)是一種輕量級的資料交換格式
相比於xml這種資料交換格式來說
因為解析xml比較的複雜
而且需要編寫大段的程式碼
所以客戶端和伺服器的資料交換格式往往通過JSON來進行交換

我們這邊設計的API主要也會用json進行交換

長得像

{
    "Food": [
    	{
    		"Name":"Apple",
    		"Price":50,
    		"MadeInTaiwan":false,
    		"productTime": "2020-09-21"
    	},
    	{
    		"Name":"Banana",
    		"Price":10,
    		"MadeInTaiwan":true,
    		"productTime": "2020-09-21"
    	}
	]
}

Xml是重量級資料交換格式
JSON是輕量級交換格式
我們這種小小專案用json就好


上一篇
[Day20] 第一支WebApi
下一篇
[Day22] Http簡介 跟 PostMan
系列文
C# 從入門到WebApi30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言