Skip to main content

Nexify

Package version Supported Python versions


Documentation: https://nexify.junah.dev

Source Code: https://github.com/junah201/nexify


Nexify is a lightweight web framework for building APIs on AWS Lambda's Python runtime based on standard Python type hints.

The key features are:

  • 🚀 Automatic Parsing: Automatically parses AWS Lambda's Event and Context objects.
  • 🔍 Data Validation: Validate user's request and response using Pydantic.
  • 📜 OpenAPI Documentation: Generates API documentation with Swagger UI and ReDoc.
  • ☁️ Deployment Automation: Deploy AWS Lambda and related infrastructure with a simple command.

Requirements

Nexify requires the following libraries:

  • Pydantic for data validation and OpenAPI documentation.
  • Boto3 for AWS deployment. (Only required in local development, not in production.)

Installation

First, set up a virtual environment, then install Nexify:

$ pip install "nexify[cli]"

---> 100%

Note: Some terminal environments require quoting "nexify[cli]" for correct installation.

Usage

Creating a Project

$ nexify init
Enter the project name: myapp
🎉 Project myapp created at 'C:\Users\junah\Desktop\myapp'
$ cd myapp

Running nexify init command generates a main.py file, a nexify.json configuration file, and etc.

  • Example main.py:
from typing import Annotated

from nexify import Body, Nexify, Path, Query, status
from pydantic import BaseModel, Field

app = Nexify(title="My Nexify API", version="0.1.0")


class Item(BaseModel):
    id: str
    name: str
    price: Annotated[int, Field(ge=0)]


@app.get("/items")
def read_items(limit: Annotated[int, Query(default=10)]) -> list[Item]:
    return [Item(id=f"{i + 1}", name=f"Item {i}", price=i * 10) for i in range(limit)]


@app.post("/items", status_code=status.HTTP_204_NO_CONTENT)
def create_item(item: Annotated[Item, Body()]): ...


@app.get("/items/{item_id}")
def read_item(item_id: Annotated[str, Path(min_length=2, max_length=8)]) -> Item:
    return Item(id=item_id, name="Foo", price=42)
  • Example nexify.json:
{
  "service": "myapp",
  "provider": {
    "name": "aws",
    "runtime": "python3.10",
    "region": "ap-northeast-2",
    "profile": "default",
    "logRetentionInDays": 14,
    "architecture": "x86_64",
    "memorySize": 128,
    "timeout": 10,
    "stage": "prod",
    "environment": { "YOUR_CUSTOM_ENV": "${env:YOUR_CUSTOM_ENV}" },
    "iamRoleStatements": [
      { "Effect": "Allow", "Action": ["s3:*"], "Resource": "*" }
    ]
  },
  "package": {
    "include": ["main.py"],
    "exclude": [".venv/**", ".git/**", ".gitignore"],
    "pipCmdExtraArgs": [""]
  },
  "resources": {
    "Resources": {
      "APIGatewayRestAPI": {
        "Type": "AWS::ApiGateway::RestApi",
        "Properties": {
          "Name": "myapp-API",
          "EndpointConfiguration": { "Types": ["EDGE"] },
          "Policy": "",
          "Description": "API for myapp"
        }
      }
    }
  }
}

Deploying

$ nexify deploy
✔ App imported successfully!
✔ Config loaded successfully!
✔ App analyzed successfully!
✔ Requirements installed successfully!
✔ Lambda functions packaged successfully!
✔ Basic stack created successfully!
✔ Template created successfully!
✔ Stack updated successfully!

🎉 Deployment successful!

Endpoints:
    - GET   https://apigatewayid.execute-api.ap-northeast-2.amazonaws.com/prod/items
    - POST  https://apigatewayid.execute-api.ap-northeast-2.amazonaws.com/prod/items
    - GET   https://apigatewayid.execute-api.ap-northeast-2.amazonaws.com/prod/items/{item_id}


Functions:
    - read_items
    - create_item
    - read_item

Once deployment is complete, API endpoints are generated.

Checking the API

Open the following URL in a browser to check the API response:

https://apigatewayid.execute-api.ap-northeast-2.amazonaws.com/prod/items/12

Note: Use the URL displayed after executing nexify deploy command.

Response example:

{"id":"12","name":"Foo","price":42}

Congratulations 🎉 You have already created an API.

  • The /items and /items/{item_id} endpoints can now receive HTTP requests.
  • The /items endpoint handles GET and POST requests, while /items/{item_id} handles GET requests.
  • The /items endpoint has a int query parameter limit with a default value of 10.
  • The /items/{item_id} endpoint has a str path parameter item_id with a length constraint between 2 and 8 characters.

Nexify uses Pydantic internally to validate the input and output data.

Swagger UI

Now go to https://apigatewayid.execute-api.ap-northeast-2.amazonaws.com/prod/docs.

Note: Please use the output URL after running the nexify deploy command.

You will see the automatic interactive API documentation (provided by Swagger UI):

Swagger UI

ReDoc

And now, go to https://apigatewayid.execute-api.ap-northeast-2.amazonaws.com/prod/redoc.

Note: Please use the output URL after running the nexify deploy command.

You will see the automatic interactive API documentation (provided by ReDoc):

ReDoc

Summary

With Nexify, you can easily develop APIs on AWS Lambda using standard Python type hints.

  • 🔍 Data Validation: Uses Pydantic for input and response validation.
    • Automatically generates clear errors for invalid data.
    • Supports validation for nested JSON objects.
  • 📦 Automatic Parsing: Extracts body, pathParameters, queryStringParameters, and more from the Event object.
  • 🔄 Response Conversion: Supports conversion of standard Python types (str, int, float, bool, list) as well as datetime, UUID, dataclass, and more.
  • 📜 OpenAPI Documentation: Supports Swagger UI and ReDoc.
  • ☁️ Deployment Automation: Deploy AWS Lambda with a single nexify deploy command.

License

This project is licensed under the terms of the MIT license.

Release files for nexify 0.7.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nexify 0.7.3
File Size Uploaded
nexify-0.7.3.tar.gz 59.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nexify 0.7.3
File Interpreter ABI Platform
nexify-0.7.3-py3-none-any.whl Python 3 none any Details

Total release size: 112.5 kB

Release files / nexify-0.7.3.tar.gz

Download URL nexify-0.7.3.tar.gz
Size 59.8 kB
Tags Source
SHA-256 checksum
How to use checksums
e6183120543173bbad2569febc5674ad27205acf7cbb6bb7456a1ee1d6ab5700
BLAKE2b-256 checksum
How to use checksums
8101d85404e7493ee4b96567d153187ff8705c5465376bf8603a7920f0461be6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via pdm/2.22.4 CPython/3.10.16 Linux/6.8.0-1021-azure

Release files / nexify-0.7.3-py3-none-any.whl

Download URL nexify-0.7.3-py3-none-any.whl
Size 52.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
24c845369a4727065e3e92ed0b91dee07e847665e128bef27979ebe50c7e8d5c
BLAKE2b-256 checksum
How to use checksums
2df30ee63779e94e0f8e10e16281b181e29412fa90c675a1f7e7523abc844b35
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via pdm/2.22.4 CPython/3.10.16 Linux/6.8.0-1021-azure

Release history Release notifications | RSS feed

This release

0.7.3 This release

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page