☞ ░ 前往老猿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. 云计算之路-出海记:命令行下的 AWS

    俗话说"三百六十行,行行出状元",自从有了电脑之后,三百六十行又多了一行 -- 命令行.GUI 的诞生开创了繁荣的 PC "窗口"(windows)时代,互联网 ...

  2. cmd 命令行

    理想的情况下,所有的程序都能自描述, 比如 mysql -h,支持哪些命令,每项命令需要哪些参数 命令行工具有几个有关进程的命令, tasklist taskkill http://hi.baidu. ...

  3. tcpack----- 2sack dack

    道当我们接收到ack的时候,我们会判断sack段,如果包含sack段的话,我们就要进行处理.这篇blog就主要来介绍内核如何处理sack段 sack dsack概念 TCP在一个RTO超时后会重传数据 ...

  4. dst_output发包

    不管是收到报文转发还是本机发送报文,最后都会调用dst_output /* Output packet to network from transport. */ static inline int ...

  5. 四、c++总结------linux多线程服务端编程

  6. shell编程之算术扩展(引号、命令替换、算术扩展)

    1.单引号 .双引号.反引号的区别 单引号:忽略所有特殊字符 双引号:忽略大部分特殊字符($  `等字符除外) [root@tlinux shell]# echo '*' * [root@tlinux ...

  7. linux中suid/sgid/sticky及扩展属性(attr)

    suid只适用于命令文件.(如/usr/bin/passwd) 当命令文件上有suid权限时,则操作用户的权限变成属主权限.命令文件上无suid权限则操作用户的权限不变. 查看suid权限: [roo ...

  8. 在线调整ceph的参数

    能够动态的进行系统参数的调整是一个很重要并且有用的属性 ceph的集群提供两种方式的调整,使用tell的方式和daemon设置的方式 一.tell方式设置 调整配置使用命令: 调整mon的参数 #ce ...

  9. [web安全原理分析]-SSRF漏洞入门

    SSRF漏洞 SSRF漏洞 SSRF意为服务端请求伪造(Server-Side Request Forge).攻击者利用SSRF漏洞通过服务器发起伪造请求,就这样可以访问内网的数据,进行内网信息探测或 ...

  10. PHP 使用gd库压缩图片并生成新图片返回全路径

    使用gd库前,先检查是否开启了gd库 phpinfo(); 如果在php配置信息里找到了gd库,那么就是开启了,没开启的自行百度如何开启php gd库 既然开启了gd库,那么直接再php里写入以下代码 ...