برنامه نویسی

ساختن یک API تجزیه و تحلیل شماره ، حقایق سرگرم کننده و بینش ریاضی با AWS Lambda و Fastapi

نمای کلی پروژه:

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

ویژگی های کلیدی:

خصوصیات ریاضی: API خواصی مانند:

  • برابری: خواه این تعداد یکنواخت باشد یا عجیب.
  • وضعیت اصلی: آیا شماره اصلی است.
  • عوامل: عوامل شماره.
  • مربع و مکعب: مربع و مکعب عدد.
  • این خصوصیات با استفاده از پایتون به صورت برنامه ای محاسبه می شود.

واقعیت سرگرم کننده: API یک واقعیت جالب در مورد شماره با استفاده از شماره API این API چیزهای بی اهمیت جالب مربوط به اعداد را ارائه می دهد.

پشته فنی:

پیتون:

  • منطق اصلی محاسبه خصوصیات ریاضی در پایتون نوشته خواهد شد.
  • کتابخانه های پایتون دوست دارند requests برای تعامل با API های خارجی (به عنوان مثال ، شماره API) استفاده می شود.

AWS Lambda:

  • منطق API به عنوان یک عملکرد بدون سرور با استفاده از AWS Lambda مستقر خواهد شد.
  • Lambda برای این مورد استفاده ایده آل است زیرا به صورت خودکار مقیاس می شود و برای ترافیک کم به متوسط ​​مقرون به صرفه است.

دروازه API:

  • AWS API Gateway برای ایجاد یک نقطه پایانی API آرام استفاده می شود که باعث عملکرد لامبدا می شود.
  • این درخواست های HTTP دریافتی را انجام می دهد (به عنوان مثال ، GET /number/{number}) و ورودی را به عملکرد Lambda منتقل کنید.

آداپتور مانگوم:

  • از آنجا که AWS Lambda از وقایع با فرمت خاص انتظار دارد ، ما از آن استفاده خواهیم کرد منگوره کتابخانه برای تطبیق برنامه وب Python ما (به عنوان مثال ، ساخته شده با FastAPI یا Flask) برای کار یکپارچه با Lambda.
NumbersAPI/
│── lambda_function.py
│── requirements.txt
└── package/
حالت تمام صفحه را وارد کنید

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

الزامات را به روز کنید. txt:

  • فریپی: چارچوب API ناهمزمان عملکرد بالا و عملکردی را ارائه می دهد.

    من مجبور شدم با نسخه های خاص FastAPI مشخص کنم ، بنابراین اطمینان حاصل کنید که شما را انتخاب می کنید 0.99.0 راه حل را از stackoverflow دریافت کرد

  • Mangum: استقرار یکپارچه API سریع را به AWS Lambda امکان پذیر می کند.

  • درخواست ها: اجازه می دهد تا تماسهای API خارجی برای غنی سازی پاسخ ها تماس بگیرند.

fastapi==0.99.0
mangum
requests
حالت تمام صفحه را وارد کنید

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

ایجاد lambda_function.py:

من از Claude AI برای تولید عملکرد زیر پایتون لامبدا استفاده کردم:

این تابع از طبقه بندی اعداد بر اساس خصوصیات ریاضی استفاده می شود و حقایق سرگرم کننده در مورد آنها را واگذار می کند. این شامل پیکربندی CORS برای درخواست های متقاطع است و به گونه ای طراحی شده است که با استفاده از AWS Lambda مستقر شود منگورهبشر

from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from mangum import Mangum
import requests
import math
from fastapi.responses import JSONResponse

app = FastAPI()

# Configure CORS
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

def is_prime(n: int) -> bool:
    if n < 2:
        return False
    for i in range(2, int(math.sqrt(abs(n))) + 1):
        if n % i == 0:
            return False
    return True

def is_perfect(n: int) -> bool:
    if n <= 1:
        return False
    sum_divisors = 1
    for i in range(2, int(math.sqrt(abs(n))) + 1):
        if n % i == 0:
            sum_divisors += i
            if i != n // i:
                sum_divisors += n // i
    return sum_divisors == abs(n)

def is_armstrong(n: int) -> bool:
    num_str = str(abs(n))
    num_digits = len(num_str)
    return sum(int(d) ** num_digits for d in num_str) == abs(n)

def get_digit_sum(n: int) -> int:
    return sum(int(d) for d in str(abs(n)))

def get_properties(n: int) -> list:
    properties = []
    if is_armstrong(n):
        properties.append("armstrong")
    if n % 2 == 0:
        properties.append("even")
    else:
        properties.append("odd")
    return properties

def get_fun_fact(n: int) -> str:
    try:
        response = requests.get(f"http://numbersapi.com/{n}/math")
        fact = response.text
        return fact.replace("\n", "").strip()
    except:
        return f"{n} is a number"

@app.get("/api/classify-number")
async def classify_number(number: str):
    # Input validation
    if not number:
        return JSONResponse(
            status_code=400,
            content={"number": None, "error": True}
        )

    try:
        # Convert to float first to handle decimal points
        num_float = float(number)
        # Convert to integer (truncating any decimal part)
        num = int(num_float)

        response_data = {
            "number": num,
            "is_prime": is_prime(num),
            "is_perfect": is_perfect(num),
            "properties": get_properties(num),
            "digit_sum": get_digit_sum(num),
            "fun_fact": get_fun_fact(num)
        }
        return JSONResponse(
            status_code=200,
            content=response_data
        )
    except ValueError:
        return JSONResponse(
            status_code=400,
            content={"number": number, "error": True}
        )
    except Exception as e:
        return JSONResponse(
            status_code=500,
            content={"number": number, "error": True}
        )

# Handler for AWS Lambda
handler = Mangum(app)
حالت تمام صفحه را وارد کنید

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

یک بسته استقرار ایجاد کنید:

# Create and activate virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

# Create package directory
mkdir package

# Install dependencies in package directory
pip install --target ./package -r requirements.txt

# Copy lambda function to package
cp lambda_function.py package/

# Create deployment ZIP
cd package
zip -r ../deployment.zip .
cd ..
حالت تمام صفحه را وارد کنید

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

استقرار با استفاده از کنسول AWS:

یک تابع لامبدا ایجاد کنید:

  • به کنسول AWS Lambda بروید

  • روی “ایجاد عملکرد” ​​کلیک کنید

  • “نویسنده را از ابتدا” انتخاب کنید

  • نام: “طبقه بندی شماره”

  • زمان اجرا: Python 3.13 یا آخرین

  • با مجوزهای اساسی لامبدا نقش اعدام را ایجاد کنید

  • ایجاد کردن عمل

تعدیل بره

کد را بارگذاری کنید:

  • پرونده Deployment.zip را از رایانه خود بارگذاری کنید

  • کنترل کننده را تنظیم کنید “lambda_function.handler”

  • مدت زمان 30 ثانیه را تنظیم کنید

  • حافظه را روی 256 مگابایت تنظیم کنید

  • نقش IAM را به روز کنید:

  • خط مشی پیوست خود را به گونه ای ویرایش کنید که به لامبدا اجازه دهد تا به سیاهههای CloudWatch دسترسی پیدا کند و API Gateway را اجرا کند:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "logs:CreateLogGroup",
                    "logs:CreateLogStream",
                    "logs:PutLogEvents"
                ],
                "Resource": "arn:aws:logs:*:*:*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "execute-api:Invoke"
                ],
                "Resource": "arn:aws:execute-api:*:*:*"
            }
        ]
    }
    

ویرایش سیاست نقش IAM

ایجاد دروازه API:

به کنسول Gateway API بروید

API استراحت

منبع API

  • سپس منبع /API /طبقه بندی شماره را از مسیر /API /منبع ایجاد کنید

منبع API

  • ایجاد روش:

    • Get را به عنوان نوع روش انتخاب کنید
    • نوع ادغام را انتخاب کنید: عملکرد لامبدا
    • ادغام پروکسی لامبدا را فعال کنید
    • عملکرد Lambda خود را که قبلاً ایجاد شده است انتخاب کنید: از منطقه صحیح انتخاب شده اطمینان حاصل کنید

لامبدا

مستقر کردن

API is accessible at: https://[YOUR-API-ID].execute-api.[REGION].amazonaws.com/prod/api/classify-number?number=371
حالت تمام صفحه را وارد کنید

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

برای آزمایش API مستقر:

curl "https://[YOUR-API-ID].execute-api.[REGION].amazonaws.com/prod/api/classify-number?number=371"
حالت تمام صفحه را وارد کنید

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

همچنین می توانید با استفاده از مرورگر وب خود تست کنید:

مرورگر وب

به یاد داشته باشید:

  1. مقادیر نگهدارنده مکان را با جزئیات حساب واقعی AWS خود جایگزین کنید

  2. نقش ها و مجوزهای مناسب IAM را پیکربندی کنید

  3. در صورت لزوم COR را فعال کنید

  4. مقادیر زمان مناسب را تنظیم کنید

  5. برای هر مشکلی ، سیاهههای مربوط به CloudWatch را کنترل کنید

  6. قبل از ارسال کاملاً آزمون

مراحل بعدی:

بیایید به هم وصل شویم – لوئیس ساو

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

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

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

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