Add the rest of the apis to the diagrams
[nonrtric/plt/sme.git] / capifcore / docs / diagrams / classdiagram.plantuml
index 8700d97..5fcd498 100644 (file)
-@startuml Information in rApp registration
-struct APIProviderEnrolmentDetails #palegreen {
-    string apiProvDomId
-    string apiProvDomInfo
-    []APIProviderFunctionDetails apiProvFuncs
+@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
+    end note
+    struct APIProviderFunctionDetails {
+        string apiProvFuncId
+        string apiProvFuncInfo
+        ApiProviderFuncRole apiProviderFuncRole (required)
+        RegistrationInformation regInfo (required)
+    }
+    note right of APIProviderFunctionDetails::apiProvFuncId
+        Id provided by CAPIF Core
+    end note
+    enum ApiProviderFuncRole {
+        AEF: API provider function is API Exposing Function.
+        APF: API provider function is API Publishing Function.
+        AMF: API Provider function is API Management Function.
+    }
+    struct RegistrationInformation {
+        string apiProvCert
+        string apiProvPubKey (required)
+    }
+    APIProviderEnrolmentDetails::apiProvFuncs "1" o-- "1..N" APIProviderFunctionDetails
+    APIProviderFunctionDetails::regInfo "1" o-- "1" RegistrationInformation
+    APIProviderFunctionDetails::apiProviderFuncRole "1" o-- "1" ApiProviderFuncRole
 }
-note right of APIProviderEnrolmentDetails::apiProvDomId
-    Id provided by CAPIF Core
-end note
-struct APIProviderFunctionDetails #palegreen {
-    string apiProvFuncId
-    string apiProvFuncInfo
-    ApiProviderFuncRole apiProviderFuncRole (required)
-    RegistrationInformation regInfo (required)
+
+' 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
+    end note
+    note "apfId matching\n APIProviderFunctionDetails::apiProvFuncId\n must be provided when publishing" as publishProviderRel
+    ServiceAPIDescription .. publishProviderRel
+    publishProviderRel .. APIProviderFunctionDetails::apiProvFuncId
+    struct AefProfile {
+        string aefId (required)
+        DataFormat dataFormat
+        string domainName
+        []InterfaceDescription interfaceDescriptions
+        Protocol protocol
+        []SecurityMethod securityMethods
+        []Version versions (required)
+    }
+    enum DataFormat {
+        JSON
+    }
+    enum Protocol {
+        HTTP_1_1
+        HTTP_2
+    }
+    note "AefProfile::aefId should match\n APIProviderFunctionDetails::apiProvFuncId" as aefIdRel
+    APIProviderFunctionDetails::apiProvFuncId .. aefIdRel
+    aefIdRel .. AefProfile::aefId
+    struct InterfaceDescription {
+        string ipv4Address
+        string ipv6Address
+        int port
+        []SecurityMethod securityMethods
+    }
+    note left of InterfaceDescription::securityMethods
+        Security methods supported by the interface,
+        it take precedence over the security methods
+        provided in AefProfile, for this specific interface.
+    end note
+    struct Version {
+        []CustomOperation custOperations
+        DateTime expiry
+        []Resource resources
+        string apiVersion (required)
+    }
+    struct CustomOperation {
+        CommunicationType commType (required)
+        string custOpName (required)
+        string description
+        []Operation operations
+    }
+    enum Operation {
+        GET
+        POST
+        PUT
+        PATCH
+        DELETE
+    }
+    enum SecurityMethod {
+        PSK
+        PKI
+        OAUTH
+    }
+    struct Resource {
+        string resourceName (required)
+        string uri (required)
+        CommunicationType commType (required)
+        string description
+    }
+    enum CommunicationType {
+        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
+}
+
+' 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 APIProviderFunctionDetails::apiProvFuncId
-    Id provided by CAPIF Core
-end note
-note right of APIProviderFunctionDetails::apiProviderFuncRole
-    - AEF: API provider function is API Exposing Function.
-    - APF: API provider function is API Publishing Function.
-    - AMF: API Provider function is API Management Function.
-end note
-struct RegistrationInformation #palegreen {
-    string apiProvCert
-    atring apiProvPubKey (required)
+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
+    }
 }
-APIProviderEnrolmentDetails::apiProvFuncs o-- APIProviderFunctionDetails
-APIProviderFunctionDetails::regInfo o-- RegistrationInformation
+DiscoveredAPIs::serviceAPIDescriptions "0..N" o-- "0..N" ServiceAPIDescription
+note "Services can only be discovered\n for an onboarded invoker through\n APIInvokerEnrolmentDetails::apiInvokerId" as invokerDiscoverRel
+DiscoveredAPIs .. invokerDiscoverRel
+invokerDiscoverRel .. APIInvokerEnrolmentDetails::apiInvokerId
 
-struct ServiceAPIDescription #lightblue {
-    string apiId
-    string apiName (required)
-    string description
-    []AefProfile aefProfiles
+' Security Service
+package "Security Service" #Pink {
+    struct AccessTokenReq {
+        string grant_type (required)
+        string client_id (required)
+        string client_secret
+        string scope
+    }
+    struct AccessTokenRsp {
+        string access_token (required)
+        string token_type (required)
+        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
 }
-note bottom of ServiceAPIDescription
-    Id provided by CAPIF Core
-end note
-struct AefProfile #lightblue {
-    string aefId (required)
-    DataFormat dataFormat
-    string domainName
-    []InterfaceDescription interfaceDescriptions
-    Protocol protocol
-    []SecurityMethod securityMethods
-    []Version versions (required)
+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
+note "Function provided in\n AccessTokenReq:scope\n must be registered for a provider" as accessProviderRel
+AccessTokenReq::scope .. accessProviderRel
+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
+    }
 }
-note left of AefProfile::dataFormat
-    - JSON: JavaScript Object Notation
-end note
-note left of AefProfile::protocol
-    - HTTP_1_1: HTTP version 1.1
-    - HTTP_2: HTTP version 2
-end note
-note left of AefProfile::securityMethods
-    - PSK: Security method 1 (Using TLS-PSK)
-    - PKI: Security method 2 (Using PKI)
-    - OAUTH: Security method 3 (TLS with OAuth token)
-end note
-note "From APIProviderFunctionDetails" as aefIdRel
-APIProviderFunctionDetails::apiProvFuncId .. aefIdRel
-aefIdRel .. AefProfile::aefId
-struct InterfaceDescription #lightblue {
-    string ipv4Address
-    string ipv6Address
-    []Operation operations
-    []SecurityMethod securityMethods
+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
+    }
 }
-note right of InterfaceDescription
-    Security methods supported by the interface,
-    it take precedence over the security methods
-    provided in AefProfile, for this specific interface.
-end note
-struct Version #lightblue {
-    string apiVersion
-    []Resource resources
+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
+    }
 }
-note right of Version::resources
-    - REQUEST_RESPONSE
-    - SUBSCRIBE_NOTIFY
-end note
-ServiceAPIDescription::aefProfiles o-- AefProfile
-AefProfile::interfaceDescriptions o-- InterfaceDescription
-AefProfile::versions o-- Version
+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
 
-struct APIInvokerEnrolmentDetails #coral {
-    string apiInvokerId
-    string apiInvokerInformation
-    APIList apiList
-    OnboardingInformation onboardingInformation
+' 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
+    }
 }
-struct OnboardingInformation #coral {
-    string apiInvokerCertificate
-    string ApiInvokerPublicKey (required)
-    string onboardingSecret
+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
 }
-note right of OnboardingInformation::onboardingSecret
-    Secret provided by CAPIF Core
-end note
-note right of APIInvokerEnrolmentDetails::apiInvokerId
-    Id provided by CAPIF Core
-end note
-APIInvokerEnrolmentDetails::apiList o-- ServiceAPIDescription : APIList
-APIInvokerEnrolmentDetails::onboardingInformation o-- OnboardingInformation
-@enduml 
+@enduml
\ No newline at end of file