☞ ░ 前往老猿Python博文目录

说明:

本文参考3GPP29.501《Principles and Guidelines for Services Definition》结合笔者的理解写成,主要用于解释5GC系统中普遍使用的URI资源概念,由于笔者对REST本身理解不透彻,难免有表述不对的地方,欢迎大家指正。

一、概述

5GC SBI API服务化接口是基于http2.0的rest风格的 接口,REST是一个http应用开发标准和规范,遵循REST风格可以使开发的接口通用,便于调用者理解接口的作用。不了解的可以参考《REST,以及RESTful的讲解》。

REST中资源URI是非常重要的概念,所有服务访问可以概括为CRUD操作,即增加(Create)、读取(Retrieve)、更新(Update)和删除(Delete),对应http的POST、GET、PUT、DELETE等方法,本文所说的API都是指http 2.0的服务化接口。

3GPP规范中5G系统中使用资源的要求在29.501文档中描述,资源可以是单个资源或者包含了子资源的资源结构体。

二、资源建模及四类原型

在设计API时,首先要考虑定义API所消耗的资源集。资源表示通过标准HTTP方法修改的对象,这些对象可以用下面详述的4个原型之一建模。资源原型有助于API设计者构造资源。在这个过程中,当资源定义与原型之一完全匹配时,设计者应该引用适当的原型。引用原型可以立即定义资源支持哪些操作和HTTP方法。提供原型以后不排除出现不同的资源类型。

2.1、Document文档原型

文档原型是其他原型的基础概念原型。任何未与其他资源原型匹配识别的资源都是文档。文档可以有表示其特定从属概念的子资源。当原型为文档原型时,不会限制任何HTTP方法的操作。通过向资源的URI发送HTTP请求,仅可以直接在文档资源上执行CRUD操作。自定义方法不能直接在资源上执行,而是通过发送一个HTTP请求到一个URI,该URI关联一个约定资源的URI。

2.2、Collection集合原型

集合原型可用于对作为资源目录的资源进行建模。集合是管理的NF服务提供者(NF Service Provider-managed),因此NF服务提供者决定在集合中创建的每个资源的URI。

创建和读取操作直接在集合上执行。

注意:

即使集合资源通常包含子资源,也允许特定集合资源在特定时间点不包含任何子资源(“空集合”)。

特别说明:
  • 集合的子资源通过集合认可的发送带集合URI的http post创建
  • 通过发送带有集合URI的GET来读取集合
  • 不允许使用集合URI的PUT和PATCH方法
  • 仅在集合资源是基于NF服务使用者的请求动态创建的情况下才允许使用带集合URI的DELETE 方法
  • 对集合子资源的授权操作依赖于该资源的原型。

2.3、Store存储原型

存储原型可以用于对作为资源目录但存储由NF服务使用者管理的资源进行建模。NF服务消费者完全决定应该向存储中添加/删除什么资源。NF服务使用者决定所添加资源的URI是什么。

注意:即使存储资源通常包含子资源,也允许特定存储资源在特定时间点不包含任何子资源(“空存储”)。

对存储资源来说:

读取操作直接在存储上执行,而创建操作则在存储子资源上执行。

更具体地说:

  • 存储子资源是通过发送带有要创建的子资源的URI的PUT来创建的

  • 通过发送带有存储URI的GET来读取存储;

  • 不允许使用存储URI的POST、PUT和PATCH方法;

  • 只有在根据NF服务使用者的请求动态创建存储资源时,才允许使用存储URI的DELETE方法。

  • 除了Create(PUT),对存储子资源的授权操作依赖于该资源的原型。

2.4、Custom operation自定义操作原型

自定义操作原型可用于建模一个不安全和非幂等的操作,但该操作不能是集合上的一个Create操作。自定义操作不直接对由自定义操作URI标识的资源进行操作。相反,当自定义操作与资源关联时,该操作将在此关联的资源上执行。例如,自定义操作可以以特殊方式修改相关联的资源,该关联资源通过自定义操作URI模板中剥离后缀字符串“/{custOpName}”来标识。

当自定义操作不与任何资源关联,而是与服务关联时,它充当带有输入参数的可执行函数,并在响应正文中返回已执行函数的结果,而不修改任何资源。

POST是唯一允许使用自定义操作URI的方法。

三、5GC SBI API的资源

资源可以是单个资源,也可以是可以包含子资源的结构化资源。建议按照上面资源建模及四类原型中提供的一种原型设计每个资源。

3.1、资源URI结构

URI唯一地标识资源,在5GC SBI API中,当资源URI是绝对URI时,其结构应按如下方式指定:

{apiRoot}/{apiName}/{apiVersion}/{apiSpecificResourceUriPart}
  • apiRoot应为以下部分顺序组成:
  1. 服务模式(“http” 或"https")
  2. 固定字符串"://"
  3. IETF RFC 3986[9]中定义的权限(authority ,指主机和可选端口)
  4. 以“/”字符开头的可选部署特定字符串(API前缀)
  • apiName为API服务的名字
  • apiVersion表示API版本的第一个字段(主版本)

虽然“apiRoot”、“apiName”和“apiVersion”一起定义API的基本URI,但每个“apiSpecificResourceUriPart”都定义API相对于基本URI的资源URI,也即表明apiSpecificResourceUriPart是资源的URI。

3.2、自定义操作的URI结构

与资源关联的自定义操作的URI应具有以下结构:

{apiRoot}/{apiName}/{apiVersion}/{apiSpecificResourceUriPart}/{custOpName}

自定义操作也可以与服务关联,而不是与资源关联。与资源无关的自定义操作的URI应具有以下结构:

{apiRoot}/{apiName}/{apiVersion}/{custOpName}
3.3、回调URI结构

回调URI应为IETF RFC 3986[9]第4.3条定义的绝对URI形式,包括权限,不包括任何查询组件、任何片段组件和任何userinfo子组件。

四、资源的表示

资源表示是特定内容格式中资源状态的序列化。它包含在HTTP/2请求或响应的数据帧中。表示头字段提供有关表示的元数据。当一条消息包含一个数据帧时,该数据帧中包含表示的数据。HTTP/2将表示头的定义重用了 IETF RFC 7231 [6]中的http1.1。HTTP/2 header中的Content-type字段作为表示头字段执行,描述数据帧中本来应该包含的表示数据,例如,如果Content-type为application/json,则数据框中的资源表示以json格式序列化。

跟老猿学Python、学5G!

☞ ░ 前往老猿Python博文目录

老猿学5G:3GPP 5G规范中的URI资源概念的更多相关文章

  1. 老猿学5G专栏文章目录

    ☞ ░ 前往老猿Python博文目录 ░ 一.3GPP规范文档及其他推荐阅读博文 老猿学5G扫盲贴:3GPP规范文档命名规则及同系列文档阅读指南 老猿学5G扫盲贴:3GPP规范中部分与计费相关的规范序 ...

  2. 老猿学5G扫盲贴:3GPP规范中与计费相关的主要规范文档列表及下载链接

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在<老猿学5G扫盲贴:3GPP规范中部分与计 ...

  3. 老猿学5G扫盲贴:3GPP规范中部分与计费相关的规范序列文档

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 经咨询华为公司的相关专家,以及结合3GPP目录下载 ...

  4. 老猿学5G扫盲贴:3GPP中的5G计费架构

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.计费逻辑架构和信息流 在32240子系列文档内 ...

  5. 老猿学5G扫盲贴:3GPP规范文档命名规则及同系列文档阅读指南

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在学习5G规范过程中,有些内容把握不定的时候,有时 ...

  6. 老猿学5G:3GPP和中国移动5G计费架构概览

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 老猿学5G这个专栏主要记录笔者因工作原因学习了解5G计费相关知识,文章按时间顺序循序渐进的介绍5G基础概念以及5G计费相关知识,该专栏前期已经完结, ...

  7. 老猿学5G扫盲贴:中移动的5G计费架构中Nchf'服务化接口以及CHF中的AGF

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.关于Nchf' 在中移动企标中出现了在3GPP ...

  8. 老猿学5G扫盲贴:R15/R16中计费架构和计费原则涉及的规范文档

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 在R16的32.240文档对应规范为3G ...

  9. 老猿学5G随笔:5G核心网中与用户数据相关的NF功能体UDM、AUSF、PCF、UDR

    在业务支撑工作中,与核心网主要的交互包括用户数据管理(含签约关系.策略数据),5G核心网中与用户数据相关的NF功能体包括UDM.AUSF和PCR以及UDR,在此只简单介绍这些NF的功能: UDM:统一 ...

随机推荐

  1. Spring Cloud 纯干货,从入门到实战

    导读 之前写过一篇SpringCloud从入门到精通的点我直达,微服务基础知识点我直达,今天我们使用Spring Cloud模拟一个电商项目.分别有以下2个服务,商品.订单.下面我们开始叭 技术栈 S ...

  2. vue踩坑

    1. 双向绑定的对象 改变或新增其属性 DOM不刷新问题 var obj = { "attr1": "1", "attr2": [2] }; ...

  3. leetcode103:permutations-ii

    题目描述 给出一组可能包含重复项的数字,返回该组数字的所有排列 例如: [1,1,2]的排列如下: [1,1,2],[1,2,1], [2,1,1]. Given a collection of nu ...

  4. Java设计系列之书店管理系统单机版

    书店管理系统: 项目练习目标 :1.Java应用程序基本分析2.培养面向对象编程的基本思想3.Java基本设计模式综合应用4.掌握分层和接口的基本设计5.构建合理的Java应用程序包结构6.综合应用J ...

  5. 为什么大多数IOC容器使用ApplicationContext,而不用BeanFactory

    1. 引言 Spring框架附带了两个IOC容器– BeanFactory 和 ApplicationContext. BeanFactory是IOC容器的最基本版本,ApplicationConte ...

  6. egit版本对应关系。

    egit版本对应关系. http://wiki.eclipse.org/EGit/FAQ#What_versions_of_Eclipse_does_EGit_target.3F

  7. linux中ugo权限管理(chmod/chown)

    查看ugo权限: ll  [root@localhost test]# ll total 12 -rwxr-xr-x 2 root root 4 Oct  3 11:44 a lrwxrwxrwx 1 ...

  8. 修改ssh的默认22端口,并使用scp的方法

    修改默认的22的ssh端口只需要修改 /etc/ssh/sshd_config 中的 port 字段为你想要的端口就可以了 以后用其他机器ssh登录这台机器只需要: ssh -p (port) (ip ...

  9. 蓝鲸平台开启consul.conf UI界面

    #第一步: vi /data/bkce/etc/supervisor-consul.conf 修改参数: command=/usr/bin/consul agent -config-file=/dat ...

  10. python-基础入门-1

    Python的打印为   print,等价于c语言的printf 1 print "hello again" 就能打印出hello again,简简单单,就这么一句. 我用的vsc ...