Home Web Front-end JS Tutorial How to make an API interface?

How to make an API interface?

Dec 09, 2024 pm 12:28 PM

How to make an API interface?

API is the application programming interface, it can be understood as a channel to communicate with different software systems. It is essentially a pre-defined functions.

API has many forms, the most popular one is to use HTTP protocol to provide services (such as: RESTful), as long as it meets the regulations can be used normally. Nowadays, many enterprises use APIs provided by third parties, and also provide APIs for third parties, so the design of APIs also needs to be careful.

How to design a good API interface?

  1. Clarify Functionality
    At the beginning of the design, you need to organize the functions of the API according to the business function points or modules to clarify that your API needs to provide.

  2. Clear Code Logic
    Keep your code tidy and add the necessary comments to ensure the interface has a single function. If an interface requires complex business logic, it is recommended to split it into multiple interfaces or encapsulate the functions into public methods independently to avoid too much code in the interface, which is not conducive to the maintenance and later iteration.

  3. Necessary Security Checksum
    A common solution is to use a digital signature. Add a signature to each HTTP request, and the server side verifies the validity of the signature to ensure the authenticity of the request.

  4. Logging
    Logging is essential to facilitate timely localization of problems.

  5. Minimize Coupling
    A good API should be as simple as possible. If the business coupling between APIs is too high, it is easy to cause an exception in a certain code, resulting in the unavailability of the relevant API. So it is better to avoid the complexity of the relationship between APIs as much as possible.

  6. Return Meaningful Status Codes
    Status code data should be carried in the API return data. For example, 200 means the request is normal, 500 means there is an internal error in the server. Returning a common status code is good for problem localization.

  7. Development Documentation
    Since API is provided for third-party or internal use, development documentation is essential, otherwise it would not be known to others how to use it.

A good API development documentation should contain the following elements:

  1. API architecture model description, development tools and version, system dependencies and other environment information.
  2. the functions provided by API.
  3. API module dependencies.
  4. invocation rules, notes.
  5. deployment notes, etc.

How to develop an API interface?

If satisfied with the development environment, probably less than 10 minutes, you can complete the development of a simple API interface (just a demo).

Before development, you need to install the JDK, Maven and IDE.

  1. Create a new project based on Spring Boot. In order to quickly complete, I choose to use (start.spring.io) to generate my project. Through [Search dependencies to add] you can choose the package. I only imported Spring MVC, if you need to access the database through Mybatis, you can also choose here, then click to generate the project.

  2. Unzip the downloaded project and introduce it into your IDE, then to create a new class: com.wukong.apidemo.controller.ApiController.

  3. Add a method in this class, the main use of @RestController, @RequestMapping, @ResponseBody tags.

  4. The simplest API interface has been completed. We can start the project, access the corresponding interface address, and get the interface return information.

  5. We can use swagger to help us generate the interface documentation and optimize the API interface.

More efficient way to make an API interface?

Both Python Flask and Java Spring Boot can be used to efficiently create an API interface.

Spring Boot has simplified the development process to a simple one. For python, I recommend a third-party package for developing API interfaces: fastapi.

It’s a fast and efficient tool with the following features:

  1. Fast: comparable to NodeJS and Go. One of the fastest Python frameworks.
  2. Fast coding: increases the speed of development by about 200% to 300%.
  3. Fewer errors: reduces about 40% of errors caused by developers.
  4. Simple: easy to use and learn. Less time spent reading documentation.
  5. Standards-based: based on and fully compatible with API’s open standards.

Make a RESTful API with Python3 and Flask(Interface Testing Services and Mockserver Tool)

Build RESTful APIs seems to be the work of developer, in fact, there are many scenarios in which test developer needs to build RESTful APIs.

Some testers will build RESTful API, hijack the server-side domain name to their own API, and return all kinds of exceptions on purpose to see the stability of the client.

REST: REpresentational State Transfer
GET - /api/Category - Retrieve all categories
POST - /api/Category - Add a new category
PUT - /api/Category - Update a category
DELETE - /api/Category - Delete a category
GET - /api/Comment - Retrieve all the stored comments
POST - /api/Comment - Add new comment
Copy after login
Copy after login

Requirements:python3.*,PostgreSQL.

REST: REpresentational State Transfer
GET - /api/Category - Retrieve all categories
POST - /api/Category - Add a new category
PUT - /api/Category - Update a category
DELETE - /api/Category - Delete a category
GET - /api/Comment - Retrieve all the stored comments
POST - /api/Comment - Add new comment
Copy after login
Copy after login

Requirements.txt as follows:
Flask - microframework for python
Flask_restful - an extension to flask for quickly building REST API.
Flask_script - provides support for writing external scripts in flask.
Flask_migrate - use Alembic's Flask app for SQLAlchemy database migration.
Marshmallow - for complex data types and python data type conversions.
Flask_sqlalchemy - flask extension that adds support for SQLAlchemy.
Flask_marshmallow - the middle layer between flask and marshmallow.
Marshmallow-sqlalchemy - the middle layer between sqlalchemy and marshmallow.
psycopg - PostgreSQL API for python.

Install dependencies

project/
├── app.py
├── config.py
├── migrate.py
├── Model.py
├── requirements.txt
├── resources
│   └── Hello.py
│   └── Comment.py
│   └── Category.py
└── run.py
Copy after login

Install and Configure PostgreSQL(Take Ubuntu 16.04 as an example)

# pip3 install -r requirements.txt
Copy after login

Configurations

# sudo apt-get update && sudo apt-get upgrade
# apt-get install postgresql postgresql-contrib
# su - postgres
$ createdb api
$ createuser andrew --pwprompt #Create User
$ psql -d api -c "ALTER USER andrew WITH PASSWORD 'api';"
Copy after login

Quick Start

app.py

from flask import Blueprint
from flask_restful import Api
from resources.Hello import Hello
from resources.Category import CategoryResource
from resources.Comment import CommentResource


api_bp = Blueprint('api', __name__)
api = Api(api_bp)

# Routes
api.add_resource(Hello, '/Hello')
api.add_resource(CategoryResource, '/Category')
api.add_resource(CommentResource, '/Comment')
Copy after login

resource/Hello.py

from flask import Blueprint
from flask_restful import Api
from resources.Hello import Hello

api_bp = Blueprint('api', __name__)
api = Api(api_bp)

# Route
api.add_resource(Hello, '/Hello')
Copy after login

run.py

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Author:    xurongzhong#126.com wechat:pythontesting qq:37391319
# CreateDate: 2018-1-10

from flask_restful import Resource


class Hello(Resource):
    def get(self):
        return {"message": "Hello, World!"}

    def post(self):
        return {"message": "Hello, World!"}
Copy after login

Starting services

from flask import Flask


def create_app(config_filename):
    app = Flask(__name__)
    app.config.from_object(config_filename)

    from app import api_bp
    app.register_blueprint(api_bp, url_prefix='/api')

    return app


if __name__ == "__main__":
    app = create_app("config")
    app.run(debug=True)
Copy after login

Use browser to visit: http://127.0.0.1:5000/api/Hello

$ python3 run.py
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 136-695-873
Copy after login

Access to databases

{
    "hello": "world"
}
Copy after login

migrate.py

from flask import Flask
from marshmallow import Schema, fields, pre_load, validate
from flask_marshmallow import Marshmallow
from flask_sqlalchemy import SQLAlchemy


ma = Marshmallow()
db = SQLAlchemy()


class Comment(db.Model):
    __tablename__ = 'comments'
    id = db.Column(db.Integer, primary_key=True)
    comment = db.Column(db.String(250), nullable=False)
    creation_date = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), nullable=False)
    category_id = db.Column(db.Integer, db.ForeignKey('categories.id', ondelete='CASCADE'), nullable=False)
    category = db.relationship('Category', backref=db.backref('comments', lazy='dynamic' ))

    def __init__(self, comment, category_id):
        self.comment = comment
        self.category_id = category_id


class Category(db.Model):
    __tablename__ = 'categories'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(150), unique=True, nullable=False)

    def __init__(self, name):
        self.name = name


class CategorySchema(ma.Schema):
    id = fields.Integer()
    name = fields.String(required=True)


class CommentSchema(ma.Schema):
    id = fields.Integer(dump_only=True)
    category_id = fields.Integer(required=True)
    comment = fields.String(required=True, validate=validate.Length(1))
    creation_date = fields.DateTime()
Copy after login

data migration

from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from Model import db
from run import create_app

app = create_app('config')

migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)


if __name__ == '__main__':
    manager.run()
Copy after login

Testing
You can use curl, for example:

$ python3 migrate.py db init
$ python3 migrate.py db migrate
$ python migrate.py db upgrade
Copy after login

The above is the detailed content of How to make an API interface?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What should I do if I encounter garbled code printing for front-end thermal paper receipts? What should I do if I encounter garbled code printing for front-end thermal paper receipts? Apr 04, 2025 pm 02:42 PM

Frequently Asked Questions and Solutions for Front-end Thermal Paper Ticket Printing In Front-end Development, Ticket Printing is a common requirement. However, many developers are implementing...

Demystifying JavaScript: What It Does and Why It Matters Demystifying JavaScript: What It Does and Why It Matters Apr 09, 2025 am 12:07 AM

JavaScript is the cornerstone of modern web development, and its main functions include event-driven programming, dynamic content generation and asynchronous programming. 1) Event-driven programming allows web pages to change dynamically according to user operations. 2) Dynamic content generation allows page content to be adjusted according to conditions. 3) Asynchronous programming ensures that the user interface is not blocked. JavaScript is widely used in web interaction, single-page application and server-side development, greatly improving the flexibility of user experience and cross-platform development.

Who gets paid more Python or JavaScript? Who gets paid more Python or JavaScript? Apr 04, 2025 am 12:09 AM

There is no absolute salary for Python and JavaScript developers, depending on skills and industry needs. 1. Python may be paid more in data science and machine learning. 2. JavaScript has great demand in front-end and full-stack development, and its salary is also considerable. 3. Influencing factors include experience, geographical location, company size and specific skills.

How to achieve parallax scrolling and element animation effects, like Shiseido's official website?
or:
How can we achieve the animation effect accompanied by page scrolling like Shiseido's official website? How to achieve parallax scrolling and element animation effects, like Shiseido's official website? or: How can we achieve the animation effect accompanied by page scrolling like Shiseido's official website? Apr 04, 2025 pm 05:36 PM

Discussion on the realization of parallax scrolling and element animation effects in this article will explore how to achieve similar to Shiseido official website (https://www.shiseido.co.jp/sb/wonderland/)...

Is JavaScript hard to learn? Is JavaScript hard to learn? Apr 03, 2025 am 12:20 AM

Learning JavaScript is not difficult, but it is challenging. 1) Understand basic concepts such as variables, data types, functions, etc. 2) Master asynchronous programming and implement it through event loops. 3) Use DOM operations and Promise to handle asynchronous requests. 4) Avoid common mistakes and use debugging techniques. 5) Optimize performance and follow best practices.

The Evolution of JavaScript: Current Trends and Future Prospects The Evolution of JavaScript: Current Trends and Future Prospects Apr 10, 2025 am 09:33 AM

The latest trends in JavaScript include the rise of TypeScript, the popularity of modern frameworks and libraries, and the application of WebAssembly. Future prospects cover more powerful type systems, the development of server-side JavaScript, the expansion of artificial intelligence and machine learning, and the potential of IoT and edge computing.

How to merge array elements with the same ID into one object using JavaScript? How to merge array elements with the same ID into one object using JavaScript? Apr 04, 2025 pm 05:09 PM

How to merge array elements with the same ID into one object in JavaScript? When processing data, we often encounter the need to have the same ID...

How to implement panel drag and drop adjustment function similar to VSCode in front-end development? How to implement panel drag and drop adjustment function similar to VSCode in front-end development? Apr 04, 2025 pm 02:06 PM

Explore the implementation of panel drag and drop adjustment function similar to VSCode in the front-end. In front-end development, how to implement VSCode similar to VSCode...

See all articles