NSJ REST Lib2

0.0.41 · active · verified Fri Apr 17

nsj-rest-lib2 is a Python library designed to enable the distribution of dynamic REST API routes. These routes are configured declaratively using JSON-based Endpoint Definition Language (EDL) files. It leverages Flask and Flask-RESTful to integrate these dynamic routes into an existing Flask application. The current version is 0.0.41, and it undergoes frequent patch updates, indicating active development.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to define an Endpoint Definition Language (EDL) configuration in JSON, use `create_dynamic_rest_api_endpoint_from_json` to create a dynamic endpoint object, and then `register_route` to add it to a Flask application. It includes a minimal Flask app and a dynamically created mock module to make the example runnable and testable. To run, save as a Python file and execute `python your_file.py`. Then, access `http://127.0.0.1:5000/api/v1/dynamic-resource` in your browser or with `curl`.

import sys
from types import ModuleType
from flask import Flask
from nsj_rest_lib2.register import register_route
from nsj_rest_lib2.util import create_dynamic_rest_api_endpoint_from_json
import os

# --- Step 1: Define your endpoint logic ---
# In a real application, 'my_app_endpoints' would be a real .py file
# and MyEndpointClass would be a class defined within it.
class MyEndpointClass:
    def my_dynamic_method(self):
        """A simple method to be called by the dynamic route."""
        return {"message": "Hello from nsj-rest-lib2 dynamic endpoint!"}, 200

# Dynamically add this class to a mock module in sys.modules
# This allows create_dynamic_rest_api_endpoint_from_json to find it
# without needing an actual file on disk for this quickstart example.
mock_module_name = 'my_app_endpoints'
if mock_module_name not in sys.modules:
    sys.modules[mock_module_name] = ModuleType(mock_module_name)
setattr(sys.modules[mock_module_name], 'MyEndpointClass', MyEndpointClass)


# --- Step 2: Initialize Flask application ---
app = Flask(__name__)
app.secret_key = os.environ.get('FLASK_SECRET_KEY', 'a_super_secret_key_for_dev') # Required for some Flask extensions

# --- Step 3: Define the declarative route configuration (EDL) ---
route_config_json = {
    "uri": "/api/v1/dynamic-resource",
    "http_method": "GET",
    "endpoint_module": mock_module_name, # References the mock module
    "endpoint_class_name": "MyEndpointClass", # Class containing the method
    "endpoint_method_name": "my_dynamic_method", # Method to be called
    "request_body_model_name": None,
    "response_body_model_name": None,
    "query_string_model_name": None,
    "path_params_model_name": None,
    "header_params_model_name": None,
    "jwt_roles": [],
    "jwt_allowed": False,
    "jwt_required": False
}

# --- Step 4: Create and register the dynamic endpoint ---
dynamic_endpoint = create_dynamic_rest_api_endpoint_from_json(route_config_json)
register_route(app, dynamic_endpoint)

# --- Step 5: Run the Flask application (for demonstration) ---
# In a production environment, use a WSGI server like Gunicorn or Waitress.
if __name__ == '__main__':
    print("\nFlask application running at http://127.0.0.1:5000")
    print("Test with: curl http://127.0.0.1:5000/api/v1/dynamic-resource")
    app.run(debug=True, port=5000)

view raw JSON →