Функция Azure как производительность и цены веб-API - PullRequest
1 голос
/ 07 июня 2019

Мы планируем создать веб-приложение, и я надеялся, что кто-нибудь сможет помочь нам решить, использовать ли службу приложений Azure или функцию Azure для предоставления API отдыха клиентской стороне.Наши требования следующие.

  1. Аутентификация и авторизация
  2. CRUD в Azure SQL и Cosmos DB
  3. Мультирегион
  4. 100 000 000 вызовов API в месяц

Сначала мы собирались создать бэкэнд с помощью службы приложений Azure.Но после изучения плюсов и минусов функций Azure функции Azure стали для нас более привлекательными.

Так что, даже неплохо было бы создать веб-приложение, которое зависит от функций Azure в качестве поставщика API REST?

Есть ли у кого-нибудь опыт создания, управления и масштабирования функций Azure как поставщика REST API?

1 Ответ

1 голос
/ 09 июня 2019

Является ли хорошей идеей создание веб-приложения, которое зависит от функций 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:

  1. Для его состояния не требуется сервер
  2. Полный REST Можно звонить из любого места в любом регионе
  3. Может развиваться как azure portal, так и локально visual studio
  4. Экономически эффективно, вы можете заплатить только за то, сколько вы используете.
  5. Поддержка нескольких языков
  6. Функциональность простой авторизации и аутентификации
  7. Нет ограничений на звонки согласно вашему тарифному плану

Много с функцией Azure:

Вы можете разработать надежный API сервис с azure functions. Он имеет много выдающихся функций. Пожалуйста, проверьте Check здесь

Авторизация и аутентификация:

Вы можете просто интегрировать свою авторизацию и аутентификацию в свое приложение функций. Даже вы можете реализовать его на каждой функции отдельно или в полном приложении. Он поддерживает большинство популярных поставщиков аутентификации, например:

  1. Azure Active Directory
  2. Microsoft Identity
  3. Goggle
  4. Facebook
  5. Twitter auth

Посмотрите, как вы можете реализовать аутентификацию:

Шаг: 1

enter image description here

Шаг: 2

enter image description here

Пример кода функции покоя:

Здесь я приведу простой фрагмент кода, с которого нужно начать: Хотя он включен 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;
        }
    }

Точка для запоминания:

  1. В случае выполнения Azure Portal просто избавьтесь от FunctionReadFromTableStorage class
  2. Вам нужна следующая ссылка для выполнения кода выше
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"
}

См. Снимок экрана:

enter image description here

Ответ почтальона:

Ответ зависит от моего собственного дизайна таблицы

[
    {
        "partitionKey": "Microsoft SharePoint Server",
        "rowKey": "2016"
    }
]

См. Снимок экрана ниже:

enter image description here

Примечание: Для CosmosDb Integration вы можете проверить здесь . Azure SQL With Function посмотрите здесь

Если у вас все еще есть какие-либо вопросы, не стесняйтесь поделиться. Спасибо и счастливого кодирования!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...