REST URI convention - Singular or plural name of resource while creating it

前端 未结 22 2158
长情又很酷
长情又很酷 2020-12-02 03:35

I\'m new to REST and I\'ve observed that in some RESTful services they use different resource URI for update/get/delete and Create. Such as

  • Create - using
相关标签:
22条回答
  • 2020-12-02 03:48

    Using plural for all methods is more practical at least in one aspect: if you're developing and testing a resource API using Postman (or similar tool), you don't need to edit the URI when switching from GET to PUT to POST etc.

    0 讨论(0)
  • 2020-12-02 03:53

    Singular

    Convenience Things can have irregular plural names. Sometimes they don't have one. But Singular names are always there.

    e.g. CustomerAddress over CustomerAddresses

    Consider this related resource.

    This /order/12/orderdetail/12 is more readable and logical than /orders/12/orderdetails/4.

    Database Tables

    A resource represents an entity like a database table. It should have a logical singular name. Here's the answer over table names.

    Class Mapping

    Classes are always singular. ORM tools generate tables with the same names as class names. As more and more tools are being used, singular names are becoming a standard.

    Read more about A REST API Developer's Dilemma

    For things without singular names

    In the case of trousers and sunglasses, they don't seem to have a singular counterpart. They are commonly known and they appear to be singular by use. Like a pair of shoes. Think about naming the class file Shoe or Shoes. Here these names must be considered as a singular entity by their use. You don't see anyone buying a single shoe to have the URL as

    /shoe/23
    

    We have to see Shoes as a singular entity.

    Reference: Top 6 REST Naming Best Practices

    0 讨论(0)
  • 2020-12-02 03:53

    An id in a route should be viewed the same as an index to a list, and naming should proceed accordingly.

    numbers = [1, 2, 3]
    
    numbers            GET /numbers
    numbers[1]         GET /numbers/1
    numbers.push(4)    POST /numbers
    numbers[1] = 23    UPDATE /numbers/1
    

    But some resources don't use ids in their routes because there's either only one, or a user never has access to more than one, so those aren't lists:

    GET /dashboard
    DELETE /session
    POST /login
    GET /users/{:id}/profile
    UPDATE /users/{:id}/profile
    
    0 讨论(0)
  • 2020-12-02 03:53

    With naming conventions, it's usually safe to say "just pick one and stick to it", which makes sense.

    However, after having to explain REST to lots of people, representing endpoints as paths on a file system is the most expressive way of doing it.
    It is stateless (files either exist or don't exist), hierarchical, simple, and familiar - you already knows how to access static files, whether locally or via http.

    And within that context, linguistic rules can only get you as far as the following:

    A directory can contain multiple files and/or sub-directories, and therefore its name should be in plural form.

    And I like that.
    Although, on the other hand - it's your directory, you can name it "a-resource-or-multiple-resources" if that's what you want. That's not really the important thing.

    What's important is that if you put a file named "123" under a directory named "resourceS" (resulting in /resourceS/123), you cannot then expect it to be accessible via /resource/123.

    Don't try to make it smarter than it has to be - changing from plural to singluar depending on the count of resources you're currently accessing may be aesthetically pleasing to some, but it's not effective and it doesn't make sense in a hierarchical system.

    Note: Technically, you can make "symbolic links", so that /resources/123 can also be accessed via /resource/123, but the former still has to exist!

    0 讨论(0)
  • 2020-12-02 03:55

    I know most people are between deciding whether to use plural or singular. The issue that has not been addressed here is that the client will need to know which one you are using, and they are always likely to make a mistake. This is where my suggestion comes from.

    How about both? And by that, I mean use singular for your whole API and then create routes to forward requests made in the plural form to the singular form. For example:

    GET  /resources     =     GET  /resource
    GET  /resources/1   =     GET  /resource/1
    POST /resources/1   =     POST /resource/1
    ...
    

    You get the picture. No one is wrong, minimal effort, and the client will always get it right.

    0 讨论(0)
  • 2020-12-02 03:56

    I am surprised to see that so many people would jump on the plural noun bandwagon. When implementing singular to plural conversions, are you taking care of irregular plural nouns? Do you enjoy pain?

    See http://web2.uvcs.uvic.ca/elc/studyzone/330/grammar/irrplu.htm

    There are many types of irregular plural, but these are the most common:

    Noun type Forming the plural Example

    Ends with -fe   Change f to v then Add -s   
        knife   knives 
        life   lives 
        wife   wives
    Ends with -f    Change f to v then Add -es  
        half   halves 
        wolf   wolves
        loaf   loaves
    Ends with -o    Add -es 
        potato   potatoes
        tomato   tomatoes
        volcano   volcanoes
    Ends with -us   Change -us to -i    
        cactus   cacti
        nucleus   nuclei
        focus   foci
    Ends with -is   Change -is to -es   
        analysis   analyses
        crisis   crises
        thesis   theses
    Ends with -on   Change -on to -a    
        phenomenon   phenomena
        criterion   criteria
    ALL KINDS   Change the vowel or Change the word or Add a different ending   
         man   men
         foot   feet
         child   children
         person   people
         tooth   teeth
         mouse   mice
     Unchanging Singular and plural are the same    
         sheep deer fish (sometimes)
    
    0 讨论(0)
提交回复
热议问题