How to structure REST resource hierarchy?

前端 未结 2 559
予麋鹿
予麋鹿 2021-02-01 06:01

I\'m new to server side web development and recently I\'ve been reading a lot about implementing RESTful API\'s. One aspect of REST API\'s that I\'m still stuck on is how to go

相关标签:
2条回答
  • 2021-02-01 06:08

    The goal is to build convenient resource identifiers, don't try to cross-reference everything. You don't have to repeat your database relations in URL representation :)

    Links like /product/{id}/buyer should never exist, because there already is identifier for that resource: /user/{id}

    Although it's ok to have /product/{id}/buyers-list because list of buyers is a property of product that does not exist in other contexts.

    0 讨论(0)
  • 2021-02-01 06:20

    You should think of it in a CRUD fashion, where each entity supports Create, Read, Update, and Delete (typically using GET, POST, PUT, and DELETE HTTP verbs respectively).

    This means that your endpoints will typically only go one level deep. For instance

    Users

    GET    /users       - Return a list of all users (you may not want to make this publically available)
    GET    /users/:id   - Return the user with that id
    POST   /users      - Create a new user. Return a 201 Status Code and the newly created id (if you want)
    PUT    /users/:id   - Update the user with that id
    DELETE /users/:id  - Delete the user with that id
    

    Going into more detail, such as /users/:id/about is likely not necessary. While it may work, it may be getting slightly overspecific.

    Perhaps in your case you could add in:

    GET    /users/:id/bought - Array of products that the user bought
    GET    /users/:id/sold   - Array of products that the user sold
    

    where you could return a list of id's (which can be fetched through the products API), or you could populate the Products before sending them back if you wish. If you do choose to populate them, you probably should not then populate users referenced by each product. This will lead to circular includes and is wrong.

    And for Products, in your sitation I would use:

    GET    /products- Return a list of all products
    GET    /products/:id   - Return the products with that id
    POST   /products- Create a new product. Return a 201 Status Code and the newly created id (if you want)
    PUT    /products/:id   - Update the product with that id
    DELETE /products/:id  - Delete the product with that id
    
    GET    /products/:id/buyers     - Array of who bought the product
    GET    /products/:id/sellers    - Array of everyone selling the product
    
    0 讨论(0)
提交回复
热议问题