gpt4 book ai didi

rest - 微服务中 REST 的 URL 模式

转载 作者:行者123 更新时间:2023-12-01 13:19:29 24 4
gpt4 key购买 nike

我们正在为我们的(大部分)RESTful 微服务考虑最好的 URL 方案。每个服务都有自己的上下文。针对主题标签(如 Instagram)特定逻辑的服务会执行与主题标签相关的所有操作。处理注册用户等所有事务的用户服务。

所以我们认为每个 URL 都以/api 开头,然后是每个服务的上下文。在这种情况下,例如/api/hashtag 或/api/user

问题在于这些服务与“核心”资源同名。例如,用户服务有一个列出所有用户的资源,因此 URL 必须类似于/api/user/user。主题标签也是如此。该服务中有一个列出所有主题标签的资源。所以 URL 必须是/api/hashtag/hashtag。

现在您遇到了问题:“核心”资源听起来与服务完全一样。我们正在为此寻找一个好的解决方案。对此有什么最佳做法吗?

谢谢!

最佳答案

url 命名背后的基本是Resource Oriented Architecture ( Assets 返回率)。即资源层次结构。

让我们从您的问题中举个例子。你有一个用户服务。我假设您将 user 作为 root 资源

那么让我们来定义用户的样子。举个例子,我会这样看。

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 命名约定有基本的了解。

关于rest - 微服务中 REST 的 URL 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51026313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com