首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web :通过外键获取资源

Web :通过外键获取资源
EN

Stack Overflow用户
提问于 2020-10-30 09:43:15
回答 1查看 913关注 0票数 0

我的问题是关于在以下情况下的.NET核心web中命名路由的“正确方法”:

  • 银行账户总是与企业相关的。
  • 企业可以有多个银行账户
  • 合同总是有一个银行账户。

所以我有这样的资源:

代码语言:javascript
复制
/api/enterprise/1 // get enterprise 1
/api/contract/1 // get contract 1
/api/bank-account/1 //get bankaccount  1

我的问题是,获得企业银行账户的最佳方式是什么?

第一个想法:

使用查询字符串作为“搜索-术语”

代码语言:javascript
复制
api/bank-account?EnterpriseId=1

第二思想

使用子资源

代码语言:javascript
复制
api/enterprise/1/bank-account

但如果我这样做,我有多个不同级别的“银行账户”,我不知道这是否是一个好办法?

代码语言:javascript
复制
api/enterprise/1/bank-account //bank-account level2
api/bank-account //bank-account level1

我认为第二个想法是一个好方法,但我不确定是否可以在不同的api级别上操作相同的“模型”。

谢谢。祝你今天愉快

EN

回答 1

Stack Overflow用户

发布于 2020-10-30 10:17:06

看看微软的路由Web示例:ASP.NET网络应用中的路由选择

我更喜欢第二个idea.With,稍微抛光一下

例如:

代码语言:javascript
复制
api/enterprise      //return List of enterprise objects if needed
api/enterprise/1    //return specific enterprise with id 1
api/enterprise/1/bank-account    //return list of bank accounts for enterprise with id 1
api/enterprise/1/bank-account/1  //return specific bank account with id 1

也就是说,如果您想在特定企业的上下文中获得银行帐户的话。

但是,如果你只想通过它的id获得银行账户,最好这样做。

代码语言:javascript
复制
api/bank-account/1

在本用例中,如果不添加带有企业id的查询字符串,则无法真正获得特定企业的银行帐户,因为

代码语言:javascript
复制
api/bank-account  //this should return list of bank accounts ALL BANK ACCOUNTS

下面是一个多级控制器示例:

代码语言:javascript
复制
[Route("Inventories/{inventoryId}/[controller]")]
[ApiController]
public class InventoryEntriesController : ControllerBase
{
    ...
    
    // GET: Inventories/{inventoryId}/InventoryEntries
    [Authorize]
    [HttpGet]
    public async Task<ActionResult<IEnumerable<InventoryEntryDto>>> GetInventoryEntries(int inventoryId)
    {
        ...
    }
    
    // GET: Inventories/{inventoryId}/InventoryEntries/{id}
    [Authorize]
    [HttpGet("{id}")]
    public async Task<ActionResult<InventoryEntryDto>> GetInventoryEntry(int id)
    {
        ...
    }

    // POST: Inventories/{inventoryId}/InventoryEntries
    [Authorize]
    [HttpPost]
    public async Task<ActionResult<InventoryEntryDto>> AddInventoryEntry(InventoryEntryDto inventoryEntryDto)
    {
        ...
    }

    // PUT: Inventories/{inventoryId}/InventoryEntries/{id}
    [Authorize]
    [HttpPut("{id}")]
    public async Task<IActionResult> UpdateInventoryEntry(int id, InventoryEntryDto inventoryEntryDto)
    {
        ...
    }

    // DELETE: Inventories/{inventoryId}/InventoryEntries/{id}
    [Authorize]
    [HttpDelete("{id}")]
    public async Task<IActionResult> DeleteInventoryEntry(int id)
    {
        ...
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64605944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档