๊ฐ์๊ณผ ๊ฒจ์ธ์ ์คํ๋ ์๋ง๋ฆฐ ๊ณผ์ ์ ์ํด ์ค๋๋ง์ ๊ต์ฌ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์์ต๋๋ค. REST Api๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ก ์์ ์ ํ๊ณ ์๋๋ฐ Azure์ ์ถ๊ฐํ๋ ์๋ฒ์ธก ์ฝ๋๊ฐ ์ฌ๋ฏธ์๊ฒ ๊ณต๊ฐ๋์ด ์๋ ์์ ๊ฐ ์์ด์ ๋งํฌ๋ฅผ ๊ฑธ์ด ๋ก๋๋ค.
์์ ๋งํฌ์์ ์ ๊ณต๋ ๊ฒ์ฒ๋ผ ์๋์ ๊ฐ์ด ๊ทธ๋๋ก copy & pasteํ๋ฉด Web App์ด Azure์ ์์ฑ๋ฉ๋๋ค.
์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
REST ์๋น์ค ์ฝ๋์ ์์น๋ฅผ ์ ์ฅํ gitrepo๋ผ๋ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ URL์ https://github.com/MicrosoftDocs/mslearn-xamarin-consume-rest-services์ ๋๋ค.
gitrepo=https://github.com/MicrosoftDocs/mslearn-xamarin-consume-rest-services
BookServer ํ๋ก์ ํธ ํ์ผ์ ์์น๋ฅผ ์ ์ฅํ gitpath๋ผ๋ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ๊ฒฝ๋ก๋ src/webservice/BookServer/BookServer.csproj์ ๋๋ค.
gitpath=src/webservice/BookServer/BookServer.csproj
์น์ฑ์ ์ด๋ฆ์ ์ ์ฅํ๊ธฐ ์ํด webappname์ด๋ผ๋ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. ๊ฐ์ bookserver$RANDOM์ผ๋ก ์ค์ ํฉ๋๋ค.
webappname=bookserver$RANDOM
ํ์ค ๊ณ์ธต์์ Azure App Service ๊ณํ์ ๋ง๋ญ๋๋ค.
az appservice plan create --name $webappname --resource-group Learn-864eafb8-42c9-4901-a5ec-1ee08b6d3992 --sku FREE
REST ์๋น์ค๋ฅผ ํธ์คํธํ ์น์ฑ์ ๋ง๋ญ๋๋ค.
az webapp create --name $webappname --resource-group Learn-864eafb8-42c9-4901-a5ec-1ee08b6d3992 --plan $webappname
์ ํ๋ฆฌ์ผ์ด์ ์ค์ ์ ํ๋ก์ ํธ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํฉ๋๋ค.
az webapp config appsettings set -g Learn-864eafb8-42c9-4901-a5ec-1ee08b6d3992 -n $webappname --settings PROJECT=$gitpath
GitHub์์ REST ์๋น์ค๋ฅผ ๋ฐฐํฌํฉ๋๋ค.
az webapp deployment source config --name $webappname --resource-group Learn-864eafb8-42c9-4901-a5ec-1ee08b6d3992 --repo-url $gitrepo --branch master --manual-integration
๋ค์ ๋ช ๋ น์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํฉ๋๋ค. ๋์ค์ Xamarin.Forms ์ ํ๋ฆฌ์ผ์ด์ ์์ ํด๋น ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํ์ฌ REST ์๋น์ค์ ์ฐ๊ฒฐํฉ๋๋ค.
echo https://$webappname.azurewebsites.net
์ฐธ์กฐ๋ ์๋์ ๊ฐ์ด ํ๋ค. ๊ณตํต ํ๋ก์ ํธ์๋ Microsoft.Net.Http, Json.net์ ํด์ค๋ค.
๊ฐ ํ๋ก์ ํธ ๋ง๋ค Json.net์ ์ถ๊ฐํ๋ค.
์ ๊ฐ ์ ๋ก๋ํ ์ฃผ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
https://bookserver22542.azurewebsites.net
์๋ง๋ฆฐ์ฉ ํด๋ผ์ด์ธํธ๋ฅผ ๋ฐ์์ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ ํ๋ฉด ๋ฉ๋๋ค.
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace BookClient.Data
{
public class BookManager
{
//์๋์ ์ฃผ์๋ฅผ ๋ณ๊ฒฝํด์ ์ฐ๊ฒฐํ๋ฉด ๋๋ค. ๋ณต์ฌํ ์ฃผ์์ + /api/books/
const string Url = " https://bookserver22542.azurewebsites.net/api/books/";
private string authorizationKey;
private async Task<HttpClient> GetClient()
{
HttpClient client = new HttpClient();
if (string.IsNullOrEmpty(authorizationKey))
{
authorizationKey = await client.GetStringAsync(Url + "login");
authorizationKey = JsonConvert.DeserializeObject<string>(authorizationKey);
}
client.DefaultRequestHeaders.Add("Authorization", authorizationKey);
client.DefaultRequestHeaders.Add("Accept", "application/json");
return client;
}
public async Task<IEnumerable<Book>> GetAll()
{
HttpClient client = await GetClient();
string result = await client.GetStringAsync(Url);
return JsonConvert.DeserializeObject<IEnumerable<Book>>(result);
}
public async Task<Book> Add(string title, string author, string genre)
{
Book book = new Book()
{
Title = title,
Authors = new List<string>(new[] { author }),
ISBN = string.Empty,
Genre = genre,
PublishDate = DateTime.Now.Date,
};
HttpClient client = await GetClient();
var response = await client.PostAsync(Url,
new StringContent(
JsonConvert.SerializeObject(book),
Encoding.UTF8, "application/json"));
return JsonConvert.DeserializeObject<Book>(
await response.Content.ReadAsStringAsync());
}
public async Task Update(Book book)
{
HttpClient client = await GetClient();
await client.PutAsync(Url + "/" + book.ISBN,
new StringContent(
JsonConvert.SerializeObject(book),
Encoding.UTF8, "application/json"));
}
public async Task Delete(string isbn)
{
HttpClient client = await GetClient();
await client.DeleteAsync(Url + isbn);
}
}
}
๊ฐ๊ฐ ์์ดํฐ๊ณผ ์๋๋ก์ด๋ํฐ์์ ์คํ๋ ์์ ํ๋ฉด์ ๋๋ค.