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 EventNotification {
255 CAPIFEventDetail eventDetail
256 CAPIFEvent events (required)
257 string subscriptionId (required)
259 struct CAPIFEventDetail {
260 AccessControlPolicyListExt accCtrlPolList
262 []string apiInvokerIds
263 []ServiceAPIDescription serviceAPIDescriptions
265 struct AccessControlPolicyListExt {
266 AccessControlPolicyList accessControlPolicyList
269 note right of EventNotification::subscriptionId
270 subscriptionId generated
272 subscription was created
275 EventSubscription::eventFilters "0..N" o-- "0..N" CAPIFEventFilter
276 EventSubscription::events "1" o-- "1..N" CAPIFEvent
277 EventSubscription::eventReq "0..N" o-- "0..N" ReportingInformation
278 CAPIFEventDetail::serviceAPIDescriptions "0..N" o-- "0..N" ServiceAPIDescription
279 CAPIFEventFilter::aefIds .. APIProviderFunctionDetails::apiProvFuncId
280 CAPIFEventFilter::apiIds .. ServiceAPIDescription::apiId
281 CAPIFEventFilter::apiInvokerIds .. APIInvokerEnrolmentDetails::apiInvokerId
282 EventNotification::eventDetail "0..1" o-- "0..N" CAPIFEventDetail
283 EventNotification::events "1" o-- "1" CAPIFEvent
284 CAPIFEventDetail::apiIds .. ServiceAPIDescription::apiId
285 CAPIFEventDetail::apiInvokerIds .. APIInvokerEnrolmentDetails::apiInvokerId
286 CAPIFEventDetail::accCtrlPolList "0..N" o-- "0..N" AccessControlPolicyListExt
287 AccessControlPolicyListExt::apiId .. ServiceAPIDescription::apiId
289 ' Access Control Policy
290 package "Access Control Policy" #LightCyan {
291 struct AccessControlPolicyList {
292 []ApiInvokerPolicy apiInvokerPolicies
294 struct ApiInvokerPolicy {
295 []TimeRangeList allowedInvocationTimeRangeList
296 int allowedInvocationsPerSecond
297 int allowedTotalInvocations
298 string apiInvokerId (required)
300 struct TimeRangeList {
305 AccessControlPolicyList::apiInvokerPolicies "0..N" o-- "0..N" ApiInvokerPolicy
306 ApiInvokerPolicy::allowedInvocationTimeRangeList "0..N" o-- "0..N" TimeRangeList
307 AccessControlPolicyListExt::accessControlPolicyList "0..N" o-- "0..N" AccessControlPolicyList
308 ApiInvokerPolicy::apiInvokerId .. APIInvokerEnrolmentDetails::apiInvokerId
311 package "Logging Service" #Silver {
312 struct InvocationLog {
313 string aefId (required)
314 string apiInvokerId (required)
315 []Log logs (required)
316 SupportedFeatures supportedFeatures
319 string apiId (required)
320 string apiName (required)
321 string apiVersion (required)
322 InterfaceDescription destInterface
324 interface inputParameters
325 DurationMs invocationLatency
326 DateTime invocationTime
328 interface outputParameters
329 Protocol protocol (required)
330 string resourceName (required)
331 string result (required)
332 InterfaceDescription srcInterface
336 InvocationLog::logs "1" o-- "1..N" Log
337 InvocationLog::aefId .. APIProviderFunctionDetails::apiProvFuncId
338 InvocationLog::apiInvokerId .. APIInvokerEnrolmentDetails::apiInvokerId
339 Log::apiId .. ServiceAPIDescription::apiId
340 Log::destInterface "0..1" o-- "0..N" InterfaceDescription
341 Log::srcInterface "0..1" o-- "0..N" InterfaceDescription
342 Log::protocol "0..1" o-- "0..N" Protocol
343 Log::operation "0..1" o-- "0..N" Operation
346 package "Auditing Servive" #PaleVioletRed {
347 struct GetApiInvocationLogsParams {
350 DateTime timeRangeStart
351 DateTime timeRangeEnd
359 InterfaceDescription srcInterface
362 GetApiInvocationLogsParams::aefId .. APIProviderFunctionDetails::apiProvFuncId
363 GetApiInvocationLogsParams::apiInvokerId .. APIInvokerEnrolmentDetails::apiInvokerId
364 GetApiInvocationLogsParams::apiId .. ServiceAPIDescription::apiId
365 GetApiInvocationLogsParams::protocol "0..1" o-- "0..1" Protocol
366 GetApiInvocationLogsParams::operation "0..1" o-- "0..1" Operation
367 GetApiInvocationLogsParams::srcInterface "0..1" o-- "0..1" InterfaceDescription
368 note "A call with\n GetApiInvocationLogsParams\n returns an InvocationLog" as auditLogRel
369 GetApiInvocationLogsParams .. auditLogRel
370 auditLogRel .. InvocationLog
373 package "Routing Service" {
375 []RoutingRule routingRules (required)
378 AefProfile aefProfile (required)
379 []Ipv4AddressRange ipv4AddrRanges
380 []Ipv6AddressRange ipv6AddrRanges
382 struct GetServiceApisServiceApiIdParams {
383 string aefId (required)
384 SupportedFeatures suppFeat
386 RoutingInfo::routingRules "1" o-- "1..N" RoutingRule
387 RoutingRule::aefProfile "1" o-- "1" AefProfile
388 GetServiceApisServiceApiIdParams::aefId .. APIProviderFunctionDetails::apiProvFuncId
389 note "A call with\n GetServiceApisServiceApiIdParams\n returns a RoutingInfo" as routingRel
390 GetServiceApisServiceApiIdParams .. routingRel
391 routingRel .. RoutingInfo