Как правильно обрабатывать мою маршрутизацию для REST API - PullRequest
2 голосов
/ 20 марта 2019

Извинения, если это вопрос новичка. Как мне следует структурировать мой REST API (я использую Node & Express).

const mongoose = require('mongoose');

const recipeSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    name: {
        type: String,
        required: true
    },
    author: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'UserData',
        required: true
    },
    description: String,
    ingredients: [String],
    steps: [String],
    bookmarkNumber: Number,
    likeNumber: Number,
    rating: Number
})

module.exports = mongoose.model('Recipe', recipeSchema); 

Хотя я понимаю, что могу использовать следующее для более масштабных функций, таких как создание рецептов и удаление рецептов и т. Д.

router.get('/', (req, res, next) => {
  // Get Recipes
});

router.post('/',checkAuth, (req, res, next) => {
  // Create Recipe
});

router.get('/:recipeID', (req, res, next) => {
// Get Specific Recipe
});

Однако в настоящее время я застрял на том, как обращаться с внутренними деталями или конкретными ресурсами. Например: допустим, я хотел бы добавить шаг к рецепту. Будет ли это конкретный случай, где я могу поставить глагол или? Моя текущая идея заключается в следующем:

router.post('/:recipeID/steps',checkAuth, (req, res, next) => {
  // Add Steps to recipeID if it exists
});

чтобы добавить URL-адреса для свойств и обрабатывать их таким образом, поскольку глаголы, по-видимому, являются грехом API REST.

1 Ответ

1 голос
/ 20 марта 2019
router.post('/:recipeID/:steps',checkAuth, (req, res, next) => {
   if (req.params.steps === 'first') {//based on your requirements

     } else if (condition) {

     }
});

Однако есть несколько правил API отдыха для различных действий.

  • GET /users: получить список пользователей.
  • GET /users/:userid: чтобы получить информацию для конкретного пользователя.
  • POST /users: создать пользователя.
  • PUT /users для обновления информации о конкретном пользователе.

Это может помочь вам понять лучший подход к проектированию конечных точек API.

...