Является ли хорошей идеей создание веб-приложения, которое зависит от функций Azure в качестве поставщика API REST?
Кажется, вы планируете использовать REST API
, используя Web Service
или Azure Function
. Ваше решение, я бы сказал, идеально. Для Azure Function
не обязательно иметь web service
для этого. Azure function
будет лучшим вариантом для вас. Вы можете реализовать все функции, которые предоставляет Web API
. Так что, если ваша цель только развить API
, вы можете начать с Azure Function
без какой-либо другой альтернативы. Его выдающийся на самом деле!
Есть ли у кого-нибудь опыт создания, управления и масштабирования функций Azure в качестве поставщика API REST?
Я работаю с Azure Function
для нашей AI Base Bot
с LUIS
интеграцией. Насколько я понимаю, его очень легко обслуживать, самое быстрое время отклика, вы можете построить его из любого места. Таким образом, вы, несомненно, можете пойти с лазурной функцией.
Почему выбирают функцию Azure:
- Для его состояния не требуется сервер
- Полный
REST
Можно звонить из любого места в любом регионе
- Может развиваться как
azure portal
, так и локально visual studio
- Экономически эффективно, вы можете заплатить только за то, сколько вы используете.
- Поддержка нескольких языков
- Функциональность простой авторизации и аутентификации
- Нет ограничений на звонки согласно вашему тарифному плану
Много с функцией Azure:
Вы можете разработать надежный API
сервис с azure functions
. Он имеет много выдающихся функций. Пожалуйста, проверьте Check здесь
Авторизация и аутентификация:
Вы можете просто интегрировать свою авторизацию и аутентификацию в свое приложение функций. Даже вы можете реализовать его на каждой функции отдельно или в полном приложении. Он поддерживает большинство популярных поставщиков аутентификации, например:
- Azure Active Directory
- Microsoft Identity
- Goggle
- Facebook
- Twitter auth
Посмотрите, как вы можете реализовать аутентификацию:
Шаг: 1
Шаг: 2
Пример кода функции покоя:
Здесь я приведу простой фрагмент кода, с которого нужно начать: Хотя он включен Azure Table Storage
Но поможет вам разработать функцию Azure и концепцию CRUD.
Ваш образец:
public class YourSampleClass
{
public string PartitionKey { get; set; }
public string RowKey { get; set; }
}
Класс хранения таблицы:
public class TableStorageClass
{
public TableStorageClass()
{
}
public TableStorageClass(DynamicTableEntity entity)
{
PartitionKey = entity.PartitionKey;
RowKey = entity.RowKey;
}
public string PartitionKey { get; set; }
public string RowKey { get; set; }
}
Функция Azure V2 Пример:
public static class FunctionReadFromTableStorage
{
[FunctionName("FunctionReadFromTableStorage")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
//Read Request Body
var content = await new StreamReader(req.Body).ReadToEndAsync();
//Extract Request Body and Parse To Class
YourSampleClass objYourSampleClass = JsonConvert.DeserializeObject<YourSampleClass>(content);
// Validate param because PartitionKey and RowKey is required to read from Table storage In this case , so I am checking here.
dynamic validationMessage;
if (string.IsNullOrEmpty(objYourSampleClass.PartitionKey))
{
validationMessage = new OkObjectResult("PartitionKey is required!");
return (IActionResult)validationMessage;
}
if (string.IsNullOrEmpty(objYourSampleClass.RowKey))
{
validationMessage = new OkObjectResult("RowKey is required!");
return (IActionResult)validationMessage;
}
// Table Storage operation with credentials
var client = new CloudTableClient(new Uri("https://YourStorageURL.table.core.windows.net/"),
new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials("YourStorageName", "xtaguZokAWbfYG4QDkBjT+YourStorageKey+T/kId/Ng+cl3TfYHtg=="));
var table = client.GetTableReference("YourTableName");
//Query filter
var query = new TableQuery()
{
FilterString = string.Format("PartitionKey eq '{0}' and RowKey eq '{1}'", objYourSampleClass.PartitionKey, objYourSampleClass.RowKey)
};
//Request for storage query with query filter
var continuationToken = new TableContinuationToken();
var storageTableQueryResults = new List<TableStorageClass>();
foreach (var entity in table.ExecuteQuerySegmentedAsync(query, continuationToken).GetAwaiter().GetResult().Results)
{
var request = new TableStorageClass(entity);
storageTableQueryResults.Add(request);
}
//As we have to return IAction Type So converting to IAction Class Using OkObjectResult We Even Can Use OkResult
var result = new OkObjectResult(storageTableQueryResults);
return (IActionResult)result;
}
}
Точка для запоминания:
- В случае выполнения
Azure Portal
просто избавьтесь от FunctionReadFromTableStorage
class
- Вам нужна следующая ссылка для выполнения кода выше
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Microsoft.WindowsAzure.Storage.Table;
using System.Collections.Generic;
Шаблон запроса почты:
Образец вызова функции:
{
"PartitionKey": "Your Param According to Table Storage Design" ,
"RowKey": "Your Param According to Table Storage Design",
"Directory": "Your Param According to Table Storage Design"
}
См. Снимок экрана:
Ответ почтальона:
Ответ зависит от моего собственного дизайна таблицы
[
{
"partitionKey": "Microsoft SharePoint Server",
"rowKey": "2016"
}
]
См. Снимок экрана ниже:
Примечание: Для CosmosDb Integration
вы можете проверить здесь . Azure SQL With Function
посмотрите здесь
Если у вас все еще есть какие-либо вопросы, не стесняйтесь поделиться. Спасибо и счастливого кодирования!