Xamarin.Forms에서 AWS의 APIGateway를 두드려 보았습니다.
18885 단어 람다APIGatewayXamarin.FormsXamarinAWS
Xamarin.Forms에서 AWS의 APIGateway를 두드려 보았습니다.
이 기사는 [초보자·학생씨 환영! ] Xamarin Part 1 Advent Calendar 2017의 둘째 날입니다.
할 일
Xamarin.Forms의 앱에서 WebAPI를 두드려 결과를 받고 표시합니다.
WebAPI(클라우드 환경)는 AWS의 API Gateway를 사용합니다.
개발 환경
구름
지역
NuGet 패키지
AWS
API 게이트웨이와 람다 준비
API Gateway
와 Lambda
의 두 가지 서비스를 사용합니다.환경 구축 등은 아래를 참조하십시오.
Lambda 코드
API Gateway
및 Lambda
를 만든 후에는 Lambda
코드를 다음과 같이 합니다. (붙여 구운 칼날의) Python입니다.Param1과 Param2를 합한 것입니다.
import json
print('Loading function')
def lambda_handler(event, context):
body = json.loads(event['body'])
print(body)
response = []
for param in body:
data = {}
data['Id'] = param['Id']
data['Sum'] = param['Param1'] + param['Param2']
response.append(data)
return {
'statusCode': '200',
'headers': {
'Content-Type': 'application/json',
},
'body': json.dumps(response),
}
이것으로 AWS 준비가 완료되었습니다.
Xamarin.Forms
Xamarin.Forms의 새 프로젝트를 만듭니다.
NuGet 패키지 설치
Newtonsoft.Json
를 찾아 추가합니다.Xamarin.Forms 코드
파라미터를 (이번은 고정값입니다만) 표시해, 버튼 누르면 APIGateway를 두드려, 응답의 결과를 표시합니다.
우선 XAML에서 갑시다.
MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TestAPIGateway"
x:Class="TestAPIGateway.MainPage">
<ContentPage.Content>
<StackLayout Margin="20">
<Label Text="'Id': 1, 'Param1': 1, 'Param2': 3"></Label>
<Label Text="'Id': 2, 'Param1': 4, 'Param2': 7"></Label>
<Label Text="'Id': 3, 'Param1': 2, 'Param2': 5"></Label>
<Button Text="Click Me!" Clicked="Button_OnClicked"></Button>
<Label x:Name="ResultStatus" Text="???"></Label>
<Label x:Name="Id1Text" Text="???"></Label>
<Label x:Name="Id2Text" Text="???"></Label>
<Label x:Name="Id3Text" Text="???"></Label>
</StackLayout>
</ContentPage.Content>
</ContentPage>
다음입니다. WebAPI 요청/응답 매개변수 클래스를 작성합니다.
public class RequestItem
{
public int Id { get; set; }
public int Param1 { get; set; }
public int Param2 { get; set; }
}
public class ResponseItem
{
public int Id { get; set; }
public int Sum { get; set; }
}
그리고 마지막으로, 버튼을 누를 때의 처리를 작성합니다.
MainPage.xaml.cs
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private async void Button_OnClicked(object sender, EventArgs e)
{
var httpClient = new HttpClient
{
Timeout = TimeSpan.FromSeconds(30)
};
/* 送信用データを作成 */
var item = new List<RequestItem>
{
new RequestItem
{
Id = 1,
Param1 = 1,
Param2 = 3,
},
new RequestItem
{
Id = 2,
Param1 = 4,
Param2 = 7,
},
new RequestItem
{
Id = 3,
Param1 = 2,
Param2 = 5,
}
};
var json = JsonConvert.SerializeObject(item, Formatting.Indented);
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
/* 送信(URIは適宜変更してください) */
var response = await httpClient.PostAsync("https://xxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/TestAPIGateway", content);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsStringAsync();
System.Diagnostics.Debug.WriteLine("Success Status");
System.Diagnostics.Debug.WriteLine(result);
var resultJson = JsonConvert.DeserializeObject<List<ResponseItem>>(result);
ResultStatus.Text = "Success";
Id1Text.Text = $"'Id': {resultJson[0].Id}, 'Sum': {resultJson[0].Sum}";
Id2Text.Text = $"'Id': {resultJson[1].Id}, 'Sum': {resultJson[1].Sum}";
Id3Text.Text = $"'Id': {resultJson[2].Id}, 'Sum': {resultJson[2].Sum}";
}
else
{
System.Diagnostics.Debug.WriteLine("Not Success Status: " + response.StatusCode.ToString() + " - Reason: " + response.ReasonPhrase);
ResultStatus.Text = "Fail";
}
}
}
동작 결과
이렇게 됩니다.
버튼을 누르기 전
버튼을 누른 후
간단하네요!
소스 코드
Github에 있습니다.
요약
Xamarin이라고 보여주고, AWS와 C#의 이야기가 되고 있습니다만, 이것을 응용하면,
등을 쉽게 실현할 수 있습니다.
본 예제 앱과는 다른 Xamarin.Forms제 앱에 짜넣어(API 두드릴 뿐입니다만) 잘 동작하고 있습니다. 릴리스 후, 나 이외는 1번도 사용되고 있지 않습니다만…
이번에는 AWS를 사용했지만 Azure에서도 마찬가지입니다.
Xamarin은 좋습니다. 앞으로도 더 공부하겠습니다!
내일은 Kenshiro_Fukuda 씨입니다. 잘 부탁드립니다.
Reference
이 문제에 관하여(Xamarin.Forms에서 AWS의 APIGateway를 두드려 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gnk263/items/1ae8bae59b3bc54eea1a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)