برنامه نویسی

ساختن یک API طبقه بندی شماره با AWS Lambda & API Gateway

مقدمه

در دنیای DevOps ، استقرار یک API مقیاس پذیر و بدون سرور یک مهارت ارزشمند است. این پست وبلاگ شما را از طریق ساختن یک API طبقه بندی شماره با استفاده از AWS Lambda ، API Gateway و Python پیاده می کند. API یک عدد را به عنوان ورودی می گیرد و خصوصیات ریاضی خود را به همراه یک واقعیت سرگرم کننده باز می گرداند.

من از دستگاه محلی برای انجام کار استفاده کرده ام اما با استقرار مشکل دارم. پس از تلاش بسیاری برای استفاده از دستگاه محلی ، نتیجه نمی گیرد. من تصمیم گرفتم از Lamba AWS استفاده کنم و کد خود را به ویرایشگر کد وارد کنم

ایجاد عملکرد
من به خانه کنسول خود حرکت می کنم و Lambda را جستجو می کنم و سپس یک عملکرد را انتخاب و ایجاد می کنم شماره کلاس

چرا لامبا را انتخاب می کنم
من AWS Lambda را انتخاب کردم زیرا بدون سرور است – به معنای من نیازی به مدیریت سرورها ندارم. AWS به طور خودکار زیرساخت ها را ارائه می دهد ، کد را اجرا می کند و پس از اجرای آن خاموش می شود و آن را بسیار مقرون به صرفه می کند زیرا من فقط در هنگام اجرای عملکرد صورتحساب می شوم.

شرح تصویر

بعد از ایجاد عملکرد ، کد خود را وارد می کنم

import json
import math
import urllib.request
def is_prime(n):
    if n < 2:
        return False
    if n in (2, 3):
        return True
    if n % 2 == 0 or n % 3 == 0:
        return False
    for i in range(5, int(math.sqrt(n)) + 1, 2):
        if n % i == 0:
            return False
    return True
def is_armstrong(n):
    if n < 0:
        return False
    digits = [int(digit) for digit in str(n)]
    power = len(digits)
    return sum(digit ** power for digit in digits) == n
def is_perfect(n):
    if n < 1:
        return False
    return sum(i for i in range(1, n // 2 + 1) if n % i == 0) == n

def get_fun_fact(n):
    if n < 0:
        return "Fun fact not available for negative numbers."
    try:
        url = f"http://numbersapi.com/{n}/math"
        with urllib.request.urlopen(url, timeout=5) as response:
            return response.read().decode("utf-8")
    except Exception:
        return "Fun fact not available."
def lambda_handler(event, context):
    query_params = event.get("queryStringParameters", {})
    number_str = query_params.get("number") if query_params else None

    if not number_str:
        return {
            "statusCode": 400,
            "headers": {
                "Access-Control-Allow-Origin": "*",
                "Access-Control-Allow-Methods": "GET",
                "Access-Control-Allow-Headers": "Content-Type"
            },
            "body": json.dumps({"error": "No number provided."})
        }

    try:
        number = int(float(number_str))
    except ValueError:
        return {
            "statusCode": 400,
            "headers": {
                "Access-Control-Allow-Origin": "*",
                "Access-Control-Allow-Methods": "GET",
                "Access-Control-Allow-Headers": "Content-Type"
            },
            "body": json.dumps({
                "error": "Invalid number format",
                "invalid_input": number_str  # Include the invalid input in the response
            })
        }

    properties = ["odd" if number % 2 else "even"]
    if is_armstrong(number):
        properties.insert(0, "armstrong")

    response_body = {
        "number": number,
        "is_prime": is_prime(number),
        "is_perfect": is_perfect(number),
        "properties": properties,
        "digit_sum": sum(int(d) for d in str(abs(number))),
        "fun_fact": get_fun_fact(number)
    }

    return {
        "statusCode": 200,
        "headers": {
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Methods": "GET",
            "Access-Control-Allow-Headers": "Content-Type"
        },
        "body": json.dumps(response_body)
    }

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پس از وارد کردن کد ، کد را قبل از استفاده از آن آزمایش می کنم

شرح تصویر

API برای طبقه بندی یک عدد بر اساس خصوصیات آن و بازگشت برخی از حقایق جالب طراحی شده است. جریان به شرح زیر است:

کاربر درخواست API را می کند
دروازه API درخواست را به AWS Lambda ارسال می کند
AWS Lambda درخواست را پردازش می کند و پاسخی ایجاد می کند
API Gateway پاسخ را به کاربر ارسال می کند

  • به AWS API Gateway بروید → ایجاد API
  • REST API → API جدید را انتخاب کنید
  • نقطه پایانی را به عنوان عملکرد لامبدا تنظیم کنید
  • مسیر منبع /API /طبقه بندی شماره را تعریف کنید
  • CORS را فعال کنید (برای درخواست های متقاطع)
  • استقرار API به یک مرحله (Prod)

بعد از آن من به APIGateway برای ایجاد API و نامگذاری آن NumberClassificationAPI سپس از Get برای ایجاد مسیر استفاده کنید /api/classfiy-api و من مرحله را با استفاده از (prod) مستقر می کنم و COR ها را فعال می کنم و سپس آن را مستقر می کنم.
(https://nr7acfudff.execute-api.us-east-1.amazonaws.com/prod/api/classify-number؟number=371)

(https://github.com/bolarinwa2030/lambda_function/tree/main)

شرح تصویر

شرح تصویر

این خروجی است

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا