1 @startuml Information model for CAPIF
3 package "Provider Service" #palegreen {
4 struct APIProviderEnrolmentDetails {
7 []APIProviderFunctionDetails apiProvFuncs
8 string regSec (required)
9 SupportedFeatures suppFeats
11 note right of APIProviderEnrolmentDetails::apiProvDomId
12 Id provided by CAPIF Core
14 struct APIProviderFunctionDetails {
16 string apiProvFuncInfo
17 ApiProviderFuncRole apiProviderFuncRole (required)
18 RegistrationInformation regInfo (required)
20 note right of APIProviderFunctionDetails::apiProvFuncId
21 Id provided by CAPIF Core
23 enum ApiProviderFuncRole {
24 AEF: API provider function is API Exposing Function.
25 APF: API provider function is API Publishing Function.
26 AMF: API Provider function is API Management Function.
28 struct RegistrationInformation {
30 string apiProvPubKey (required)
32 APIProviderEnrolmentDetails::apiProvFuncs "1" o-- "1..N" APIProviderFunctionDetails
33 APIProviderFunctionDetails::regInfo "1" o-- "1" RegistrationInformation
34 APIProviderFunctionDetails::apiProviderFuncRole "1" o-- "1" ApiProviderFuncRole
38 package "Publish Service" #lightblue {
39 struct ServiceAPIDescription {
41 string apiName (required)
43 []AefProfile aefProfiles
44 SupportedFeatures apiSuppFeat
45 SupportedFeatures supportedFeatures
47 note left of ServiceAPIDescription::apiId
48 Id provided by CAPIF Core
50 note "apfId matching\n APIProviderFunctionDetails::apiProvFuncId\n must be provided when publishing" as publishProviderRel
51 ServiceAPIDescription .. publishProviderRel
52 publishProviderRel .. APIProviderFunctionDetails::apiProvFuncId
54 string aefId (required)
57 []InterfaceDescription interfaceDescriptions
59 []SecurityMethod securityMethods
60 []Version versions (required)
69 note "AefProfile::aefId should match\n APIProviderFunctionDetails::apiProvFuncId" as aefIdRel
70 APIProviderFunctionDetails::apiProvFuncId .. aefIdRel
71 aefIdRel .. AefProfile::aefId
72 struct InterfaceDescription {
76 []SecurityMethod securityMethods
78 note left of InterfaceDescription::securityMethods
79 Security methods supported by the interface,
80 it take precedence over the security methods
81 provided in AefProfile, for this specific interface.
84 []CustomOperation custOperations
87 string apiVersion (required)
89 struct CustomOperation {
90 CommunicationType commType (required)
91 string custOpName (required)
93 []Operation operations
102 enum SecurityMethod {
108 string resourceName (required)
109 string uri (required)
110 CommunicationType commType (required)
113 enum CommunicationType {
117 ServiceAPIDescription::aefProfiles "1" o-- "1..N" AefProfile
118 AefProfile::interfaceDescriptions "1" o-- "1..N" InterfaceDescription
119 AefProfile::protocol "0..1" o-- "0..1" Protocol
120 AefProfile::securityMethods "1" o-- "1..N" SecurityMethod
121 AefProfile::dataFormat "0..1" o-- "0..N" DataFormat
122 InterfaceDescription::securityMethods "1" o-- "1..N" SecurityMethod
123 AefProfile::versions "1" o-- "1..N" Version
124 Version::resources "1..N" o-- "1..N" Resource
125 Version::custOperations "0..1" o-- "0..N" CustomOperation
126 CustomOperation::CommunicationType "1" o-- "1" CommunicationType
127 CustomOperation::operations "0..N" o-- "0..N" Operation
128 Resource::commType "1" o-- "1" CommunicationType
132 package "Invoker Management" #coral {
133 struct APIInvokerEnrolmentDetails {
135 string apiInvokerInformation
137 OnboardingInformation onboardingInformation (required)
138 SupportedFeatures supportedFeatures
140 note right of APIInvokerEnrolmentDetails::apiInvokerId
144 struct OnboardingInformation {
145 string apiInvokerCertificate
146 string ApiInvokerPublicKey (required)
147 string onboardingSecret
149 note right of OnboardingInformation::Secret
153 APIInvokerEnrolmentDetails::apiList "1" o-- "1..N" ServiceAPIDescription
154 APIInvokerEnrolmentDetails::onboardingInformation "1" o-- "1" OnboardingInformation
156 note "APIList containing services\n available for the invoker.\n Provided by capifcore" as invServiceRel
157 APIInvokerEnrolmentDetails::apiList .. invServiceRel
158 invServiceRel .. ServiceAPIDescription
161 package "Discover Service" #Yellow {
162 struct DiscoveredAPIs {
163 []ServiceAPIDescription serviceAPIDescriptions
166 DiscoveredAPIs::serviceAPIDescriptions "0..N" o-- "0..N" ServiceAPIDescription
167 note "Services can only be discovered\n for an onboarded invoker through\n APIInvokerEnrolmentDetails::apiInvokerId" as invokerDiscoverRel
168 DiscoveredAPIs .. invokerDiscoverRel
169 invokerDiscoverRel .. APIInvokerEnrolmentDetails::apiInvokerId
172 package "Security Service" #Pink {
173 struct AccessTokenReq {
174 string grant_type (required)
175 string client_id (required)
179 struct AccessTokenRsp {
180 string access_token (required)
181 string token_type (required)
182 DurationSec expires_in (required)
185 struct ServiceSecurity {
186 []SecurityInformation securityInfo (required)
187 SupportedFeatures supportedFeatures
189 struct SecurityInformation {
192 string authenticationInfo
193 string authorizationInfo
194 InterfaceDescription interfaceDetails
195 []SecurityMethod prefSecurityMethods
196 []SecurityMethod selSecurityMethods
198 ServiceSecurity::securityInfo "1" o-- "1..N" SecurityInformation
199 SecurityInformation::interfaceDetails "0..1" o-- "0..N" InterfaceDescription
200 SecurityInformation::prefSecurityMethods "1" o-- "1..N" SecurityMethod
201 SecurityInformation::selSecurityMethods "0..1" o-- "0..N" SecurityMethod
203 SecurityInformation::aefId .. APIProviderFunctionDetails::apiProvFuncId
204 SecurityInformation::apiId .. ServiceAPIDescription::apiId
205 note "AccessTokenReq::client_id and\n AccessTokenReq::client_secret\n must match registered invoker" as accessInvokerRel
206 AccessTokenReq::client_id .. accessInvokerRel
207 accessInvokerRel .. APIInvokerEnrolmentDetails::apiInvokerId
208 note "Function provided in\n AccessTokenReq:scope\n must be registered for a provider" as accessProviderRel
209 AccessTokenReq::scope .. accessProviderRel
210 accessProviderRel .. APIProviderFunctionDetails::apiProvFuncId
211 note "API provided in\n AccessTokenReq:scope\n must be published" as accessPublishRel
212 AccessTokenReq::scope .. accessPublishRel
213 accessPublishRel .. AefProfile::aefId
216 package "Event Service" #Orange {
217 struct EventSubscription {
218 []CAPIFEvent events (required)
219 Uri notificationDestination (required)
220 ReportingInformation eventReq
221 []CAPIFEventFilter eventFilters
222 SupportedFeatures supportedFeatures
224 struct CAPIFEventFilter {
227 []string apiInvokerIds
230 SERVICE_API_AVAILABLE
231 SERVICE_API_UNAVAILABLE
233 API_INVOKER_ONBOARDED
234 API_INVOKER_OFFBOARDED
235 SERVICE_API_INVOCATION_SUCCESS
236 SERVICE_API_INVOCATION_FAILURE
237 ACCESS_CONTROL_POLICY_UPDATE
238 ACCESS_CONTROL_POLICY_UNAVAILABLE
239 API_INVOKER_AUTHORIZATION_REVOKED
241 API_TOPOLOGY_HIDING_CREATED
242 API_TOPOLOGY_HIDING_REVOKED
244 struct ReportingInformation {
245 DurationSec grpRepTime
247 Uinteger maxReportNbr
248 NotificationFlag notifFlag
249 NotificationMethod notifMethod
250 PartitioningCriteria partitionCriteria
251 DurationSec repPeriod
252 SamplingRation sampRatio
254 struct CAPIFEventDetail {
255 AccessControlPolicyListExt accCtrlPolList
257 []string apiInvokerIds
258 []ServiceAPIDescription serviceAPIDescriptions
260 struct AccessControlPolicyListExt {
261 AccessControlPolicyList accessControlPolicyList
265 EventSubscription::eventFilters "0..N" o-- "0..N" CAPIFEventFilter
266 EventSubscription::events "1" o-- "1..N" CAPIFEvent
267 EventSubscription::eventReq "0..N" o-- "0..N" ReportingInformation
268 CAPIFEventDetail::serviceAPIDescriptions "0..N" o-- "0..N" ServiceAPIDescription
269 CAPIFEventFilter::aefIds .. APIProviderFunctionDetails::apiProvFuncId
270 CAPIFEventFilter::apiIds .. ServiceAPIDescription::apiId
271 CAPIFEventFilter::apiInvokerIds .. APIInvokerEnrolmentDetails::apiInvokerId
272 CAPIFEventDetail::apiIds .. ServiceAPIDescription::apiId
273 CAPIFEventDetail::apiInvokerIds .. APIInvokerEnrolmentDetails::apiInvokerId
274 CAPIFEventDetail::accCtrlPolList "0..N" o-- "0..N" AccessControlPolicyListExt
275 AccessControlPolicyListExt::apiId .. ServiceAPIDescription::apiId
277 ' Access Control Policy
278 package "Access Control Policy" #LightCyan {
279 struct AccessControlPolicyList {
280 []ApiInvokerPolicy apiInvokerPolicies
282 struct ApiInvokerPolicy {
283 []TimeRangeList allowedInvocationTimeRangeList
284 int allowedInvocationsPerSecond
285 int allowedTotalInvocations
286 string apiInvokerId (required)
288 struct TimeRangeList {
293 AccessControlPolicyList::apiInvokerPolicies "0..N" o-- "0..N" ApiInvokerPolicy
294 ApiInvokerPolicy::allowedInvocationTimeRangeList "0..N" o-- "0..N" TimeRangeList
295 AccessControlPolicyListExt::accessControlPolicyList "0..N" o-- "0..N" AccessControlPolicyList
296 ApiInvokerPolicy::apiInvokerId .. APIInvokerEnrolmentDetails::apiInvokerId
299 package "Logging Service" #Silver {
300 struct InvocationLog {
301 string aefId (required)
302 string apiInvokerId (required)
303 []Log logs (required)
304 SupportedFeatures supportedFeatures
307 string apiId (required)
308 string apiName (required)
309 string apiVersion (required)
310 InterfaceDescription destInterface
312 interface inputParameters
313 DurationMs invocationLatency
314 DateTime invocationTime
316 interface outputParameters
317 Protocol protocol (required)
318 string resourceName (required)
319 string result (required)
320 InterfaceDescription srcInterface
324 InvocationLog::logs "1" o-- "1..N" Log
325 InvocationLog::aefId .. APIProviderFunctionDetails::apiProvFuncId
326 InvocationLog::apiInvokerId .. APIInvokerEnrolmentDetails::apiInvokerId
327 Log::apiId .. ServiceAPIDescription::apiId
328 Log::destInterface "0..1" o-- "0..N" InterfaceDescription
329 Log::srcInterface "0..1" o-- "0..N" InterfaceDescription
330 Log::protocol "0..1" o-- "0..N" Protocol
331 Log::operation "0..1" o-- "0..N" Operation
334 package "Auditing Servive" #PaleVioletRed {
335 struct GetApiInvocationLogsParams {
338 DateTime timeRangeStart
339 DateTime timeRangeEnd
347 InterfaceDescription srcInterface
350 GetApiInvocationLogsParams::aefId .. APIProviderFunctionDetails::apiProvFuncId
351 GetApiInvocationLogsParams::apiInvokerId .. APIInvokerEnrolmentDetails::apiInvokerId
352 GetApiInvocationLogsParams::apiId .. ServiceAPIDescription::apiId
353 GetApiInvocationLogsParams::protocol "0..1" o-- "0..1" Protocol
354 GetApiInvocationLogsParams::operation "0..1" o-- "0..1" Operation
355 GetApiInvocationLogsParams::srcInterface "0..1" o-- "0..1" InterfaceDescription
356 note "A call with\n GetApiInvocationLogsParams\n returns an InvocationLog" as auditLogRel
357 GetApiInvocationLogsParams .. auditLogRel
358 auditLogRel .. InvocationLog
361 package "Routing Service" {
363 []RoutingRule routingRules (required)
366 AefProfile aefProfile (required)
367 []Ipv4AddressRange ipv4AddrRanges
368 []Ipv6AddressRange ipv6AddrRanges
370 struct GetServiceApisServiceApiIdParams {
371 string aefId (required)
372 SupportedFeatures suppFeat
374 RoutingInfo::routingRules "1" o-- "1..N" RoutingRule
375 RoutingRule::aefProfile "1" o-- "1" AefProfile
376 GetServiceApisServiceApiIdParams::aefId .. APIProviderFunctionDetails::apiProvFuncId
377 note "A call with\n GetServiceApisServiceApiIdParams\n returns a RoutingInfo" as routingRel
378 GetServiceApisServiceApiIdParams .. routingRel
379 routingRel .. RoutingInfo