☞ ░ 前往老猿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. 源码分析:同步基础框架——AbstractQueuedSynchronizer(AQS)

    简介 AQS 全称是 AbstractQueuedSynchronizer,位于java.util.concurrent.locks 包下面,AQS 提供了一个基于FIFO的队列和维护了一个状态sta ...

  2. http代理阅读4 响应缓存处理

    if (c->read->ready) { ngx_http_upstream_process_header(r, u); //读事件触发 准备处理http头部信息 return; } 向 ...

  3. socket套接字(字节序、地址转换)

    什么是socket: socket可以看成是用户进程与内核网络协议栈的编程接口. socket不仅可以用于本机的进程间通信,还可以用于网络上 不同主机之间的进程通信.IPv4套接口地址结构 struc ...

  4. CPU相关的学习

    我理解的CPU 目前对cpu的了解停留在这个水平 查看CPU型号: cat /proc/cpuinfo |grep model |tail -n 1 model name : Intel(R) Xeo ...

  5. 动态JavaWeb工程的架构问题

    B/S 网络应用的分层 前端(表示层) 后端( 业务逻辑层, 数据库访问层 ) 分层的目的->分模块->解耦 1,表示层---和用户直接交互 html,js,css, servlet 2, ...

  6. ①SpringCloud 实战:引入Eureka组件,完善服务治理

    简介 Netflix Eureka 是一款由 Netflix 开源的基于 REST 服务的注册中心,用于提供服务发现功能.Spring Cloud Eureka 是 Spring Cloud Netf ...

  7. 03python开发之流程控制

    03 python开发之流程控制 目录 03 python开发之流程控制 3 流程控制 3.1 流程判断之if判断 3.1.1 代码块 3.1.2 if判断基础语法 3.1.3 案例 3.1.4 if ...

  8. MathType单边大括号的编辑技巧你知道吗?

    大家都知道,一般情况下,数学里面的括号都是成对出现的,但是也有些情况下可以只用到单边的括号,就比如分段函数,在编写的时候只需用到左半边的括号.MathType作为专业的公式编辑器,用它来编写公式再方便 ...

  9. 轻松学编曲,论FL钢琴卷帘

    我们平时做视频时难免要用到音乐,市面上又有很多调音编曲软件,我们该如何选择呢?在这里笔者给大家推荐一款音乐制作软件FL Studio20,也就是业内知名度很高的水果音乐制作软件,这款音乐制作软件笔者用 ...

  10. H5系列之新input

    虽说H5 新填了几个很方便的input 类型,但是吧,想法是美好的,但是现实很残酷,兼容性不太好.基本只有google浏览器能用.但是既然出了,那么就要了解他,知道有这么一个东西就好. input类型 ...