X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=capifcore%2Fdocs%2Fdiagrams%2Fclassdiagram.plantuml;h=5fcd498c86e8c021da7a7ac000b9538f753e06ea;hb=refs%2Fchanges%2F74%2F9974%2F1;hp=54965b97ca24226dd18df449525d97fdfea4a851;hpb=f2b14d0af529fdb4a2258d025593f1f805c4e4ca;p=nonrtric%2Fplt%2Fsme.git diff --git a/capifcore/docs/diagrams/classdiagram.plantuml b/capifcore/docs/diagrams/classdiagram.plantuml index 54965b9..5fcd498 100644 --- a/capifcore/docs/diagrams/classdiagram.plantuml +++ b/capifcore/docs/diagrams/classdiagram.plantuml @@ -1,10 +1,12 @@ -@startuml Information in rApp registration +@startuml Information model for CAPIF +' Provider Service package "Provider Service" #palegreen { struct APIProviderEnrolmentDetails { string apiProvDomId string apiProvDomInfo []APIProviderFunctionDetails apiProvFuncs string regSec (required) + SupportedFeatures suppFeats } note right of APIProviderEnrolmentDetails::apiProvDomId Id provided by CAPIF Core @@ -27,17 +29,20 @@ package "Provider Service" #palegreen { string apiProvCert string apiProvPubKey (required) } + APIProviderEnrolmentDetails::apiProvFuncs "1" o-- "1..N" APIProviderFunctionDetails + APIProviderFunctionDetails::regInfo "1" o-- "1" RegistrationInformation + APIProviderFunctionDetails::apiProviderFuncRole "1" o-- "1" ApiProviderFuncRole } -APIProviderEnrolmentDetails::apiProvFuncs "1" o-- "1..N" APIProviderFunctionDetails -APIProviderFunctionDetails::regInfo "1" o-- "1" RegistrationInformation -APIProviderFunctionDetails::apiProviderFuncRole "1" o-- "1" ApiProviderFuncRole +' Publish Service package "Publish Service" #lightblue { struct ServiceAPIDescription { string apiId string apiName (required) string description []AefProfile aefProfiles + SupportedFeatures apiSuppFeat + SupportedFeatures supportedFeatures } note left of ServiceAPIDescription::apiId Id provided by CAPIF Core @@ -109,52 +114,61 @@ package "Publish Service" #lightblue { REQUEST_RESPONSE SUBSCRIBE_NOTIFY } + ServiceAPIDescription::aefProfiles "1" o-- "1..N" AefProfile + AefProfile::interfaceDescriptions "1" o-- "1..N" InterfaceDescription + AefProfile::protocol "0..1" o-- "0..1" Protocol + AefProfile::securityMethods "1" o-- "1..N" SecurityMethod + AefProfile::dataFormat "0..1" o-- "0..N" DataFormat + InterfaceDescription::securityMethods "1" o-- "1..N" SecurityMethod + AefProfile::versions "1" o-- "1..N" Version + Version::resources "1..N" o-- "1..N" Resource + Version::custOperations "0..1" o-- "0..N" CustomOperation + CustomOperation::CommunicationType "1" o-- "1" CommunicationType + CustomOperation::operations "0..N" o-- "0..N" Operation + Resource::commType "1" o-- "1" CommunicationType } -ServiceAPIDescription::aefProfiles "1" o-- "1..N" AefProfile -AefProfile::interfaceDescriptions "1" o-- "1..N" InterfaceDescription -AefProfile::protocol "0..1" o-- "0..1" Protocol -AefProfile::securityMethods "1" o-- "1..N" SecurityMethod -AefProfile::dataFormat "0..1" o-- "0..N" DataFormat -InterfaceDescription::securityMethods "1" o-- "1..N" SecurityMethod -AefProfile::versions "1" o-- "1..N" Version -Version::resources "1..N" o-- "1..N" Resource -Version::custOperations "0..1" o-- "0..N" CustomOperation -CustomOperation::CommunicationType "1" o-- "1" CommunicationType -CustomOperation::operations "0..N" o-- "0..N" Operation -Resource::commType "1" o-- "1" CommunicationType +' Invoker Management package "Invoker Management" #coral { struct APIInvokerEnrolmentDetails { string apiInvokerId string apiInvokerInformation APIList apiList OnboardingInformation onboardingInformation (required) + SupportedFeatures supportedFeatures } + note right of APIInvokerEnrolmentDetails::apiInvokerId + Id provided by + CAPIF Core + end note struct OnboardingInformation { string apiInvokerCertificate string ApiInvokerPublicKey (required) string onboardingSecret } + note right of OnboardingInformation::Secret + Secret provided + by CAPIF Core + end note + APIInvokerEnrolmentDetails::apiList "1" o-- "1..N" ServiceAPIDescription + APIInvokerEnrolmentDetails::onboardingInformation "1" o-- "1" OnboardingInformation } -note right of OnboardingInformation::onboardingSecret - Secret provided by CAPIF Core -end note -note left of APIInvokerEnrolmentDetails::apiInvokerId - Id provided by CAPIF Core -end note -APIInvokerEnrolmentDetails::apiList "1" o-- "1..N" ServiceAPIDescription : APIList containing services\n available for the invoker.\n Provided by capifcore -APIInvokerEnrolmentDetails::onboardingInformation "1" o-- "1" OnboardingInformation +note "APIList containing services\n available for the invoker.\n Provided by capifcore" as invServiceRel +APIInvokerEnrolmentDetails::apiList .. invServiceRel +invServiceRel .. ServiceAPIDescription +' Discover Service package "Discover Service" #Yellow { struct DiscoveredAPIs { []ServiceAPIDescription serviceAPIDescriptions } } DiscoveredAPIs::serviceAPIDescriptions "0..N" o-- "0..N" ServiceAPIDescription -note "Services can only be discovered\n for an onboarded invoker through\n APIInvokerEnrolmentDetails::apiId" as invokerDiscoverRel +note "Services can only be discovered\n for an onboarded invoker through\n APIInvokerEnrolmentDetails::apiInvokerId" as invokerDiscoverRel DiscoveredAPIs .. invokerDiscoverRel invokerDiscoverRel .. APIInvokerEnrolmentDetails::apiInvokerId +' Security Service package "Security Service" #Pink { struct AccessTokenReq { string grant_type (required) @@ -168,7 +182,26 @@ package "Security Service" #Pink { DurationSec expires_in (required) string scope } + struct ServiceSecurity { + []SecurityInformation securityInfo (required) + SupportedFeatures supportedFeatures + } + struct SecurityInformation { + string aefId + string apiId + string authenticationInfo + string authorizationInfo + InterfaceDescription interfaceDetails + []SecurityMethod prefSecurityMethods + []SecurityMethod selSecurityMethods + } + ServiceSecurity::securityInfo "1" o-- "1..N" SecurityInformation + SecurityInformation::interfaceDetails "0..1" o-- "0..N" InterfaceDescription + SecurityInformation::prefSecurityMethods "1" o-- "1..N" SecurityMethod + SecurityInformation::selSecurityMethods "0..1" o-- "0..N" SecurityMethod } +SecurityInformation::aefId .. APIProviderFunctionDetails::apiProvFuncId +SecurityInformation::apiId .. ServiceAPIDescription::apiId note "AccessTokenReq::client_id and\n AccessTokenReq::client_secret\n must match registered invoker" as accessInvokerRel AccessTokenReq::client_id .. accessInvokerRel accessInvokerRel .. APIInvokerEnrolmentDetails::apiInvokerId @@ -178,4 +211,171 @@ accessProviderRel .. APIProviderFunctionDetails::apiProvFuncId note "API provided in\n AccessTokenReq:scope\n must be published" as accessPublishRel AccessTokenReq::scope .. accessPublishRel accessPublishRel .. AefProfile::aefId + +' Event Service +package "Event Service" #Orange { + struct EventSubscription { + []CAPIFEvent events (required) + Uri notificationDestination (required) + ReportingInformation eventReq + []CAPIFEventFilter eventFilters + SupportedFeatures supportedFeatures + } + struct CAPIFEventFilter { + []string aefIds + []string apiIds + []string apiInvokerIds + } + enum CAPIFEvent { + SERVICE_API_AVAILABLE + SERVICE_API_UNAVAILABLE + SERVICE_API_UPDATE + API_INVOKER_ONBOARDED + API_INVOKER_OFFBOARDED + SERVICE_API_INVOCATION_SUCCESS + SERVICE_API_INVOCATION_FAILURE + ACCESS_CONTROL_POLICY_UPDATE + ACCESS_CONTROL_POLICY_UNAVAILABLE + API_INVOKER_AUTHORIZATION_REVOKED + API_INVOKER_UPDATED + API_TOPOLOGY_HIDING_CREATED + API_TOPOLOGY_HIDING_REVOKED + } + struct ReportingInformation { + DurationSec grpRepTime + bool immRep + Uinteger maxReportNbr + NotificationFlag notifFlag + NotificationMethod notifMethod + PartitioningCriteria partitionCriteria + DurationSec repPeriod + SamplingRation sampRatio + } + struct CAPIFEventDetail { + AccessControlPolicyListExt accCtrlPolList + []string apiIds + []string apiInvokerIds + []ServiceAPIDescription serviceAPIDescriptions + } + struct AccessControlPolicyListExt { + AccessControlPolicyList accessControlPolicyList + string apiId + } +} +EventSubscription::eventFilters "0..N" o-- "0..N" CAPIFEventFilter +EventSubscription::events "1" o-- "1..N" CAPIFEvent +EventSubscription::eventReq "0..N" o-- "0..N" ReportingInformation +CAPIFEventDetail::serviceAPIDescriptions "0..N" o-- "0..N" ServiceAPIDescription +CAPIFEventFilter::aefIds .. APIProviderFunctionDetails::apiProvFuncId +CAPIFEventFilter::apiIds .. ServiceAPIDescription::apiId +CAPIFEventFilter::apiInvokerIds .. APIInvokerEnrolmentDetails::apiInvokerId +CAPIFEventDetail::apiIds .. ServiceAPIDescription::apiId +CAPIFEventDetail::apiInvokerIds .. APIInvokerEnrolmentDetails::apiInvokerId +CAPIFEventDetail::accCtrlPolList "0..N" o-- "0..N" AccessControlPolicyListExt +AccessControlPolicyListExt::apiId .. ServiceAPIDescription::apiId + +' Access Control Policy +package "Access Control Policy" #LightCyan { + struct AccessControlPolicyList { + []ApiInvokerPolicy apiInvokerPolicies + } + struct ApiInvokerPolicy { + []TimeRangeList allowedInvocationTimeRangeList + int allowedInvocationsPerSecond + int allowedTotalInvocations + string apiInvokerId (required) + } + struct TimeRangeList { + DateTime startTime + DateTime stopTime + } +} +AccessControlPolicyList::apiInvokerPolicies "0..N" o-- "0..N" ApiInvokerPolicy +ApiInvokerPolicy::allowedInvocationTimeRangeList "0..N" o-- "0..N" TimeRangeList +AccessControlPolicyListExt::accessControlPolicyList "0..N" o-- "0..N" AccessControlPolicyList +ApiInvokerPolicy::apiInvokerId .. APIInvokerEnrolmentDetails::apiInvokerId + +' Logging Service +package "Logging Service" #Silver { + struct InvocationLog { + string aefId (required) + string apiInvokerId (required) + []Log logs (required) + SupportedFeatures supportedFeatures + } + struct Log { + string apiId (required) + string apiName (required) + string apiVersion (required) + InterfaceDescription destInterface + string fwdInterface + interface inputParameters + DurationMs invocationLatency + DateTime invocationTime + Operation operation + interface outputParameters + Protocol protocol (required) + string resourceName (required) + string result (required) + InterfaceDescription srcInterface + Uri uri + } +} +InvocationLog::logs "1" o-- "1..N" Log +InvocationLog::aefId .. APIProviderFunctionDetails::apiProvFuncId +InvocationLog::apiInvokerId .. APIInvokerEnrolmentDetails::apiInvokerId +Log::apiId .. ServiceAPIDescription::apiId +Log::destInterface "0..1" o-- "0..N" InterfaceDescription +Log::srcInterface "0..1" o-- "0..N" InterfaceDescription +Log::protocol "0..1" o-- "0..N" Protocol +Log::operation "0..1" o-- "0..N" Operation + +' Auditing Service +package "Auditing Servive" #PaleVioletRed { + struct GetApiInvocationLogsParams { + string aefId + string apiInvokerId + DateTime timeRangeStart + DateTime timeRangeEnd + string apiId + string apiName + string apiVersion + Protocol protocol + Operation operation + string result + string resourceName + InterfaceDescription srcInterface + } +} +GetApiInvocationLogsParams::aefId .. APIProviderFunctionDetails::apiProvFuncId +GetApiInvocationLogsParams::apiInvokerId .. APIInvokerEnrolmentDetails::apiInvokerId +GetApiInvocationLogsParams::apiId .. ServiceAPIDescription::apiId +GetApiInvocationLogsParams::protocol "0..1" o-- "0..1" Protocol +GetApiInvocationLogsParams::operation "0..1" o-- "0..1" Operation +GetApiInvocationLogsParams::srcInterface "0..1" o-- "0..1" InterfaceDescription +note "A call with\n GetApiInvocationLogsParams\n returns an InvocationLog" as auditLogRel +GetApiInvocationLogsParams .. auditLogRel +auditLogRel .. InvocationLog + +' Routing Service +package "Routing Service" { + struct RoutingInfo { + []RoutingRule routingRules (required) + } + struct RoutingRule { + AefProfile aefProfile (required) + []Ipv4AddressRange ipv4AddrRanges + []Ipv6AddressRange ipv6AddrRanges + } + struct GetServiceApisServiceApiIdParams { + string aefId (required) + SupportedFeatures suppFeat + } + RoutingInfo::routingRules "1" o-- "1..N" RoutingRule + RoutingRule::aefProfile "1" o-- "1" AefProfile + GetServiceApisServiceApiIdParams::aefId .. APIProviderFunctionDetails::apiProvFuncId + note "A call with\n GetServiceApisServiceApiIdParams\n returns a RoutingRule" as routingRel + GetServiceApisServiceApiIdParams .. routingRel + routingRel .. RoutingInfo +} @enduml \ No newline at end of file