72 - API 接口开发速查手册

适用人群:后端开发者
类型:速查手册

PHP Laravel API

// routes/api.php
Route::get('/users', [UserController::class, 'index']);
Route::post('/users', [UserController::class, 'store']);
Route::get('/users/{user}', [UserController::class, 'show']);
Route::put('/users/{user}', [UserController::class, 'update']);
Route::delete('/users/{user}', [UserController::class, 'destroy']);

// app/Http/Controllers/UserController.php
class UserController extends Controller
{
    public function index()
    {
        return response()->json(User::paginate(20));
    }
    
    public function store(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|email|unique:users',
        ]);
        $user = User::create($validated);
        return response()->json($user, 201);
    }
    
    public function show(User $user)
    {
        return response()->json($user);
    }
    
    public function update(Request $request, User $user)
    {
        $user->update($request->only(['name', 'email']));
        return response()->json($user);
    }
    
    public function destroy(User $user)
    {
        $user->delete();
        return response()->json(null, 204);
    }
}

Python Flask API

from flask import Flask, request, jsonify
app = Flask(__name__)

users = []

@app.route('/api/users', methods=['GET'])
def get_users():
    return jsonify(users)

@app.route('/api/users', methods=['POST'])
def create_user():
    data = request.get_json()
    user = {'id': len(users) + 1, **data}
    users.append(user)
    return jsonify(user), 201

@app.route('/api/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
    data = request.get_json()
    for user in users:
        if user['id'] == user_id:
            user.update(data)
            return jsonify(user)
    return jsonify({'error': 'Not found'}), 404

@app.route('/api/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
    global users
    users = [u for u in users if u['id'] != user_id]
    return '', 204

Go Gin API

package main

import (
    "net/http"
    "github.com/gin-gonic/gin"
)

type User struct {
    ID    int    `json:"id"`
    Name  string `json:"name" binding:"required"`
    Email string `json:"email" binding:"required,email"`
}

var users = []User{}

func main() {
    r := gin.Default()
    
    api := r.Group("/api")
    {
        api.GET("/users", getUsers)
        api.POST("/users", createUser)
        api.PUT("/users/:id", updateUser)
        api.DELETE("/users/:id", deleteUser)
    }
    
    r.Run(":8080")
}

func getUsers(c *gin.Context) {
    c.JSON(http.StatusOK, users)
}

func createUser(c *gin.Context) {
    var user User
    if err := c.ShouldBindJSON(&user); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }
    user.ID = len(users) + 1
    users = append(users, user)
    c.JSON(http.StatusCreated, user)
}

func updateUser(c *gin.Context) {
    id := c.Param("id")
    var updated User
    if err := c.ShouldBindJSON(&updated); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
        return
    }
    for i, u := range users {
        if fmt.Sprintf("%d", u.ID) == id {
            users[i].Name = updated.Name
            users[i].Email = updated.Email
            c.JSON(http.StatusOK, users[i])
            return
        }
    }
    c.JSON(http.StatusNotFound, gin.H{"error": "Not found"})
}

Java Spring Boot API

@RestController
@RequestMapping("/api/users")
public class UserController {
    
    @Autowired
    private UserRepository userRepository;
    
    @GetMapping
    public List<User> getAll() {
        return userRepository.findAll();
    }
    
    @PostMapping
    public ResponseEntity<User> create(@RequestBody @Valid User user) {
        User saved = userRepository.save(user);
        return ResponseEntity.status(201).body(saved);
    }
    
    @GetMapping("/{id}")
    public User getById(@PathVariable Long id) {
        return userRepository.findById(id)
            .orElseThrow(() -> new RuntimeException("User not found"));
    }
    
    @PutMapping("/{id}")
    public User update(@PathVariable Long id, @RequestBody User user) {
        user.setId(id);
        return userRepository.save(user);
    }
    
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> delete(@PathVariable Long id) {
        userRepository.deleteById(id);
        return ResponseEntity.noContent().build();
    }
}

Node.js Express API

const express = require('express');
const app = express();
app.use(express.json());

let users = [];

app.get('/api/users', (req, res) => res.json(users));

app.post('/api/users', (req, res) => {
    const user = { id: users.length + 1, ...req.body };
    users.push(user);
    res.status(201).json(user);
});

app.put('/api/users/:id', (req, res) => {
    const user = users.find(u => u.id === parseInt(req.params.id));
    if (!user) return res.status(404).json({ error: 'Not found' });
    Object.assign(user, req.body);
    res.json(user);
});

app.delete('/api/users/:id', (req, res) => {
    users = users.filter(u => u.id !== parseInt(req.params.id));
    res.status(204).send();
});

app.listen(3000);


HTTP 状态码速查

状态码含义使用场景
200OKGET/PUT成功
201CreatedPOST创建成功
204No ContentDELETE成功
400Bad Request参数错误
401Unauthorized未登录
403Forbidden无权限
404Not Found资源不存在
422Unprocessable验证失败
500Server Error服务器错误

统一响应格式

{
  "code": 200,
  "message": "success",
  "data": { },
  "meta": {
    "page": 1,
    "per_page": 20,
    "total": 100
  }
}

返回首页