网址命名背后的基本原理是Resource Oriented Architecture (ROA)。即资源层次结构。
让我们从您的问题中举一个例子。你有一个用户服务。我假设您将user 视为root resource。
所以让我们定义一个用户的样子。举个例子吧。
User
| - code
| - name
| - cars
这里我假设一个用户可以有一个代码、名称和一些汽车(可以不止一辆)。
现在让我们看看如何看到汽车。
Car
| - number
| - make
| - model
| - year
现在您可以为这样的用户定义一个 json 对象。
{
"code": "001A",
"name": "alice",
"cars": [
{
"number": "ab123",
"make": "toyota",
"model": "corolla",
"year": 2015
},
{
"number": "we345",
"make": "nissan",
"model": "sunny",
"year": 2017
}
]
}
因此,如果我想提供一个端点来检索所有用户,我会提供一个这样的端点。
/api/user-service/users
请注意 users(-- 复数),因为我可以拥有多个用户。它会产生这样的响应..
[
{
"code": "001A",
"name": "alice",
"cars": [
{
"make": "toyota",
"model": "corolla",
"year": 2015
},
{
"make": "nissan",
"model": "sunny",
"year": 2017
}
]
},
{
"code": "001B",
"name": "bob",
"cars": [
{
"make": "toyota",
"model": "yaris",
"year": 2016
},
{
"make": "bmw",
"model": "318i",
"year": 2017
}
]
}
]
如果我们需要一个端点来检索特定用户的数据,我会给出这样的端点。
/api/user-service/users/{user-code}
例子
/api/user-service/users/001A
所以它会产生这样的响应。
{
"code": "001A",
"name": "alice",
"cars": [
{
"number": "ab123",
"make": "toyota",
"model": "corolla",
"year": 2015
},
{
"number": "we345",
"make": "nissan",
"model": "sunny",
"year": 2017
}
]
}
如果我们想要一个端点来检索给定用户的所有汽车,它会是这样的。
/api/user-service/users/{user-code}/cars
请注意,汽车(--复数)
例子
/api/user-service/users/001A/cars
所以它会产生这样的响应。
[
{
"number": "ab123",
"make": "toyota",
"model": "corolla",
"year": 2015
},
{
"number": "we345",
"make": "nissan",
"model": "sunny",
"year": 2017
}
]
希望您对 REST url 命名约定有基本的了解。