در مقاله امروز نحوه مصرف Web API در برنامه ASP.NET Core MVC با استفاده از Factory Pattern و HttpClient Request را خواهیم دید.
چرا ما به این نیاز داریم؟
در معماری برنامههای کاربردی مدرن (سرویسگرا یا Microservices)، ما باید تماسهای HttpClient را برای دریافت و ارسال دادهها به/از سرور برقرار کنیم. در برنامه ما، ما به پایگاه داده متصل نمی شویم. ما API هایی خواهیم داشت که طبق درخواست ما به پایگاه داده متصل می شوند. بنابراین برای دستیابی به آن، باید بدانیم که چگونه Web API ها را مصرف کنیم.
خب حالا بیایید شروع کنیم.
در برنامه ما، API هایی که استفاده خواهیم کرد در مقاله قبلی من ایجاد شده اند . ما آن APIها را مصرف خواهیم کرد. بیایید پروژه خود را ایجاد کنیم. ما یک برنامه MVC در ASP.NET Core 2.0 ایجاد خواهیم کرد.
پس از ایجاد پروژه ما، پروژه دیگری با همان راه حل ایجاد خواهیم کرد. آن پروژه شامل مدل هایی خواهد بود که در API ها استفاده خواهند شد.
![هسته ASP.NET](http://pezhvak24.ir/dl/10kcor/cscd/article/consuming-web-apis-in-asp-net-core-mvc-application/Images/image003.jpg)
حال برای ایجاد مدلها در این پروژه، به درخواست و پاسخ Web API که در شرف مصرف هستیم نیاز داریم (وقتی هر API را مصرف میکنید، باید درخواست و پاسخ آن را داشته باشید).
![هسته ASP.NET](http://pezhvak24.ir/dl/10kcor/cscd/article/consuming-web-apis-in-asp-net-core-mvc-application/Images/image005.png)
بنابراین، GetAllUsers API لیستی از کاربران با ویژگی های خاص را برمی گرداند و از آنجایی که این روش get است، بنابراین هیچ درخواستی در بدنه وجود ندارد.
حال بر این اساس UsersModel خود را ایجاد می کنیم.
![هسته ASP.NET](http://pezhvak24.ir/dl/10kcor/cscd/article/consuming-web-apis-in-asp-net-core-mvc-application/Images/image006.jpg)
من این کلاس را با ویژگی DataContract تزئین کردهام تا آن را سریالسازی کنم و هر ویژگی داخل آن را با DataMember تزئین کردهام و ویژگی Name آن را مانند پاسخ JSON دادهام.
این ویژگی Name به گونه ای مفید خواهد بود که وقتی تصمیم می گیرید نام فیلدهای خود را تغییر دهید، قرارداد شما به Web API خراب نمی شود.
اکنون پاسخ SaveUsers را می بینیم،
![هسته ASP.NET](http://pezhvak24.ir/dl/10kcor/cscd/article/consuming-web-apis-in-asp-net-core-mvc-application/Images/image007.jpg)
همانطور که می بینیم ورودی مدل کاربر است و خروجی مدل دیگری است (از آنجایی که API را ایجاد کردیم ساختار مدل را می دانیم بنابراین کلاس مدل دیگری را Message.cs ایجاد خواهم کرد، راه دیگری را برای دریافت کلاس از JSON به شما نشان خواهم داد)
![هسته ASP.NET](http://pezhvak24.ir/dl/10kcor/cscd/article/consuming-web-apis-in-asp-net-core-mvc-application/Images/image008.jpg)
اکنون پروژه دیگری را در داخل راه حل خود CoreApiClient ایجاد خواهیم کرد. این پروژه مسئول ارتباط با API ما خواهد بود.
![هسته ASP.NET](http://pezhvak24.ir/dl/10kcor/cscd/article/consuming-web-apis-in-asp-net-core-mvc-application/Images/image009.jpg)