Adding documentation for provider 36/11236/2
authorychacon <yennifer.chacon@est.tech>
Mon, 29 May 2023 09:57:06 +0000 (11:57 +0200)
committerychacon <yennifer.chacon@est.tech>
Wed, 31 May 2023 08:32:20 +0000 (10:32 +0200)
Issue-ID: NONRTRIC-861
Signed-off-by: ychacon <yennifer.chacon@est.tech>
Change-Id: Id74b4750f1f4bd48e06e18bb6760778dfb5c4ac3

provider/Dockerfile
provider/README.md [new file with mode: 0644]
provider/docs/Publish a new API.svg [new file with mode: 0644]
provider/docs/Register API Provider Domain.svg [new file with mode: 0644]
provider/docs/Retrieve all published APIs.svg [new file with mode: 0644]
provider/docs/publishapi.plantuml [new file with mode: 0644]
provider/docs/registerproviderdomain.plantuml [new file with mode: 0644]
provider/docs/retrievepublishedapi.plantuml [new file with mode: 0644]

index bfadfb8..8c421a1 100644 (file)
@@ -26,13 +26,13 @@ COPY go.mod .
 COPY go.sum .
 RUN go mod download
 COPY . .
-RUN go build -o /capifprovider
+RUN go build -o /capif-stub-provider
 ##
 ## Deploy
 ##
 FROM gcr.io/distroless/base-debian11
 WORKDIR /
 ## Copy from "build" stage
-COPY --from=build /capifprovider .
+COPY --from=build /capif-stub-provider .
 USER nonroot:nonroot
-ENTRYPOINT ["/capifprovider"]
+ENTRYPOINT ["/capif-stub-provider"]
diff --git a/provider/README.md b/provider/README.md
new file mode 100644 (file)
index 0000000..cd0e2a9
--- /dev/null
@@ -0,0 +1,167 @@
+<!--
+ -
+   ========================LICENSE_START=================================
+   O-RAN-SC
+   %%
+   Copyright (C) 2023: Nordix Foundation
+   %%
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   ========================LICENSE_END===================================
+
+-->
+
+# O-RAN-SC Non-RealTime RIC CAPIF Provider Stub
+
+This is a Go implementation of a stub for the CAPIF Provider function, based on the 3GPP "29.222 Common API Framework for 3GPP Northbound APIs (CAPIF)" interfaces, see https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3450.
+
+This stub offers a user interface that helps to test the functionalities implemented in the O-RAN-SC Capif implementation and the supported features are the following:
+
+- Registers a new API Provider domain with API provider domain functions profiles.
+- Publish a new API
+- Retrieve all published APIs
+
+### Registers a new API Provider domain with API provider domain functions profiles.
+
+This service operation is used by an API management function to register API provider domain functions as a recognized API provider of CAPIF domain.
+
+<img src="docs/Register API Provider Domain.svg">
+
+The request from the provider domain should include API provider Enrolment Details, consisting of details of all API provider domain functions, for example:
+
+```
+{
+    "apiProvDomInfo": "Provider domain",
+    "apiProvFuncs": [
+        {
+            "apiProvFuncInfo": "rApp as APF",
+            "apiProvFuncRole": "APF",
+            "regInfo": {
+                "apiProvPubKey": "APF-PublicKey"
+            }
+        },
+        {
+            "apiProvFuncInfo": "rApp as AEF",
+            "apiProvFuncRole": "AEF",
+            "regInfo": {
+                "apiProvPubKey": "AEF-PublicKey"
+            }
+        },
+        {
+            "apiProvFuncInfo": "rApp as AMF",
+            "apiProvFuncRole": "AMF",
+            "regInfo": {
+                "apiProvPubKey": "AMF-PublicKey"
+            }
+        },
+        {
+            "apiProvFuncInfo": "Gateway as entrypoint AEF",
+            "apiProvFuncRole": "AEF",
+            "regInfo": {
+                "apiProvPubKey": "AEF-Gateway-PublicKey"
+            }
+        }
+    ],
+    "regSec": "PSK"
+}
+```
+
+The CAPIF core proceeds to register the provider and creates Ids for the API provider domain functions that will be return as part as the response message.
+
+### Publish a new API
+
+This service operation is used by an API publishing function to publish service APIs on the CAPIF core function.
+
+<img src="docs/Publish a new API.svg">
+
+The CAPIF supports publishing service APIs by the API provider. The API publishing function can be within PLMN trust domain or within 3rd party trust domain.
+
+In order to publish a new API, the APF should be registered in the CAPIF core (apfId is required) along with the Service API information.
+
+The Service API information includes:
+- Service API name
+- API provider name (optional)
+- Service API type
+- Communication type
+- Serving Area Information (optional)
+- AEF location (optional)
+- Interface details (e.g. IP address, port number, URI)
+- Protocols
+- Version numbers
+- Data format
+
+```
+{
+    "apiName": "example",
+    "description": "Example API of rApp B",
+    "aefProfiles": [
+        {
+            "aefId": "AEF_id_rApp_as_AEF",
+            "description": "Example rApp B as AEF",
+            "versions": [
+                {
+                    "apiVersion": "v1",
+                    "resources": [
+                        {
+                            "resourceName": "example",
+                            "commType": "REQUEST_RESPONSE",
+                            "uri": "/example/subscription/subscription_id_1",
+                            "operations": [
+                                "GET"
+                            ]
+                        }
+                    ]
+                }
+            ],
+            "protocol": "HTTP_1_1",
+                       "securityMethods": ["PSK"],
+                       "interfaceDescriptions": [
+                               {
+                                 "ipv4Addr": "string",
+                                 "port": 65535,
+                                 "securityMethods": ["PKI"]
+                               },
+                               {
+                                 "ipv4Addr": "string",
+                                 "port": 65535,
+                                 "securityMethods": ["PKI"]
+                               }
+                         ]
+        }
+    ]
+}
+```
+
+
+### Retrieve all published APIs
+
+This service operation is used by an API publishing function to retrieve service APIs from the CAPIF core function.
+
+<img src="docs/Retrieve all published APIs.svg">
+
+Respond includes requested API Information.
+
+## Build application
+
+To build the application, run the following command:
+
+    go build
+
+The application can also be built as a Docker image, by using the following command:
+
+    docker build . -t capifprov
+
+## Run
+
+To run the provider from the command line, run the following commands from this folder.
+
+    ./capifprov [-port <port (default 9090)>] [-capifCoreUrl <URL to Capif core (default http://localhost:8090)>] [-loglevel <log level (default Info)>]
diff --git a/provider/docs/Publish a new API.svg b/provider/docs/Publish a new API.svg
new file mode 100644 (file)
index 0000000..7162914
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="599px" preserveAspectRatio="none" style="width:848px;height:599px;background:#FFFFFF;" version="1.1" viewBox="0 0 848 599" width="848px" zoomAndPan="magnify"><defs/><g><rect fill="#DDDDDD" height="587.7188" style="stroke:#181818;stroke-width:0.5;" width="497.5" x="219" y="6"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="104" x="415.75" y="18.0669">CAPIF Internal</text><rect fill="#ADD8E6" height="399.125" style="stroke:#000000;stroke-width:1.5;" width="832.5" x="10" y="98.2969"/><rect fill="#FFA500" height="75.3984" style="stroke:#000000;stroke-width:1.5;" width="373.5" x="459" y="326.4922"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="70" x2="70" y1="81.2969" y2="514.4219"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="261" x2="261" y1="81.2969" y2="514.4219"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="375" x2="375" y1="81.2969" y2="514.4219"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="525" x2="525" y1="81.2969" y2="514.4219"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="661.5" x2="661.5" y1="81.2969" y2="514.4219"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="794.5" x2="794.5" y1="81.2969" y2="514.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="95" x="20" y="77.9951">ProviderClient</text><ellipse cx="70.5" cy="13.5" fill="#E2E2F0" rx="8" ry="8" style="stroke:#181818;stroke-width:0.5;"/><path d="M70.5,21.5 L70.5,48.5 M57.5,29.5 L83.5,29.5 M70.5,48.5 L57.5,63.5 M70.5,48.5 L83.5,63.5 " fill="none" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="95" x="20" y="526.417">ProviderClient</text><ellipse cx="70.5" cy="538.2188" fill="#E2E2F0" rx="8" ry="8" style="stroke:#181818;stroke-width:0.5;"/><path d="M70.5,546.2188 L70.5,573.2188 M57.5,554.2188 L83.5,554.2188 M70.5,573.2188 L57.5,588.2188 M70.5,573.2188 L83.5,588.2188 " fill="none" style="stroke:#181818;stroke-width:0.5;"/><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="77" x="223" y="50"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="230" y="69.9951">capifcore</text><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="77" x="223" y="513.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="230" y="533.417">capifcore</text><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="131" x="310" y="50"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="317" y="69.9951">providermanager</text><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="131" x="310" y="513.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="317" y="533.417">providermanager</text><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="113" x="469" y="50"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="99" x="476" y="69.9951">publishservice</text><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="113" x="469" y="513.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="99" x="476" y="533.417">publishservice</text><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="102" x="610.5" y="50"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="88" x="617.5" y="69.9951">eventservice</text><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="102" x="610.5" y="513.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="88" x="617.5" y="533.417">eventservice</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="50" x="766.5" y="77.9951">invoker</text><ellipse cx="794.5" cy="13.5" fill="#E2E2F0" rx="8" ry="8" style="stroke:#181818;stroke-width:0.5;"/><path d="M794.5,21.5 L794.5,48.5 M781.5,29.5 L807.5,29.5 M794.5,48.5 L781.5,63.5 M794.5,48.5 L807.5,63.5 " fill="none" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="50" x="766.5" y="526.417">invoker</text><ellipse cx="794.5" cy="538.2188" fill="#E2E2F0" rx="8" ry="8" style="stroke:#181818;stroke-width:0.5;"/><path d="M794.5,546.2188 L794.5,573.2188 M781.5,554.2188 L807.5,554.2188 M794.5,573.2188 L781.5,588.2188 M794.5,573.2188 L807.5,588.2188 " fill="none" style="stroke:#181818;stroke-width:0.5;"/><path d="M10,98.2969 L74,98.2969 L74,105.4297 L64,115.4297 L10,115.4297 L10,98.2969 " fill="#ADD8E6" style="stroke:#000000;stroke-width:1.5;"/><rect fill="none" height="399.125" style="stroke:#000000;stroke-width:1.5;" width="832.5" x="10" y="98.2969"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="19" x="25" y="111.3638">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="108" x="89" y="110.5073">[Publish Service]</text><polygon fill="#181818" points="249.5,162.8281,259.5,166.8281,249.5,170.8281,253.5,166.8281" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="70.5" x2="255.5" y1="166.8281" y2="166.8281"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="101" x="77.5" y="131.4966">Publish services</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="92" x="81.5" y="146.6294">with providerId</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="163" x="81.5" y="161.7622">andServiceAPIDescription</text><polygon fill="#181818" points="513.5,191.9609,523.5,195.9609,513.5,199.9609,517.5,195.9609" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="261.5" x2="519.5" y1="195.9609" y2="195.9609"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="101" x="268.5" y="190.895">Publish services</text><polygon fill="#181818" points="386.5,236.2266,376.5,240.2266,386.5,244.2266,382.5,240.2266" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="380.5" x2="524.5" y1="240.2266" y2="240.2266"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="126" x="392.5" y="220.0278">Are AEFs registered</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="80" x="396.5" y="235.1606">for provider?</text><polygon fill="#181818" points="513.5,265.3594,523.5,269.3594,513.5,273.3594,517.5,269.3594" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="375.5" x2="519.5" y1="269.3594" y2="269.3594"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="17" x="382.5" y="264.2935">Ok</text><line style="stroke:#181818;stroke-width:1.0;" x1="525.5" x2="567.5" y1="298.4922" y2="298.4922"/><line style="stroke:#181818;stroke-width:1.0;" x1="567.5" x2="567.5" y1="298.4922" y2="311.4922"/><line style="stroke:#181818;stroke-width:1.0;" x1="526.5" x2="567.5" y1="311.4922" y2="311.4922"/><polygon fill="#181818" points="536.5,307.4922,526.5,311.4922,536.5,315.4922,532.5,311.4922" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="77" x="532.5" y="293.4263">Create apiId</text><path d="M459,326.4922 L523,326.4922 L523,333.625 L513,343.625 L459,343.625 L459,326.4922 " fill="#FFA500" style="stroke:#000000;stroke-width:1.5;"/><rect fill="none" height="75.3984" style="stroke:#000000;stroke-width:1.5;" width="373.5" x="459" y="326.4922"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="19" x="474" y="339.5591">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="175" x="538" y="338.7026">[Subcribed Event Handling]</text><polygon fill="#181818" points="649.5,360.7578,659.5,364.7578,649.5,368.7578,653.5,364.7578" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="525.5" x2="655.5" y1="364.7578" y2="364.7578"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="112" x="532.5" y="359.6919">Service published</text><polygon fill="#181818" points="782.5,389.8906,792.5,393.8906,782.5,397.8906,786.5,393.8906" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="661.5" x2="788.5" y1="393.8906" y2="393.8906"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="109" x="668.5" y="388.8247">CAPIFEventDetail</text><polygon fill="#181818" points="272.5,441.1563,262.5,445.1563,272.5,449.1563,268.5,445.1563" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="266.5" x2="524.5" y1="445.1563" y2="445.1563"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="139" x="278.5" y="424.9575">ServiceAPIDescription</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="59" x="282.5" y="440.0903">with apiId</text><polygon fill="#181818" points="81.5,485.4219,71.5,489.4219,81.5,493.4219,77.5,489.4219" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="75.5" x2="260.5" y1="489.4219" y2="489.4219"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="139" x="87.5" y="469.2231">ServiceAPIDescription</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="59" x="91.5" y="484.356">with apiId</text><!--MD5=[af66958e26605bdd3a3cb71e3d5736d5]
+@startuml Publish a new API\r
+actor ProviderClient\r
+box "CAPIF Internal"\r
+participant capifcore\r
+participant providermanager\r
+participant publishservice\r
+participant eventservice\r
+end box\r
+actor invoker\r
+\r
+alt#LightBlue #LightBlue Publish Service\r
+    ProviderClient->capifcore: Publish services\n with providerId\n andServiceAPIDescription\r
+    capifcore->publishservice: Publish services\r
+    publishservice->providermanager: Are AEFs registered\n for provider?\r
+    providermanager->publishservice: Ok\r
+    publishservice->publishservice: Create apiId\r
+    alt#Orange #Orange Subcribed Event Handling\r
+        publishservice->eventservice: Service published\r
+        eventservice->invoker: CAPIFEventDetail\r
+    end\r
+    publishservice->capifcore: ServiceAPIDescription\n with apiId\r
+    capifcore->ProviderClient: ServiceAPIDescription\n with apiId\r
+end\r
+\r
+@enduml\r
+
+PlantUML version 1.2022.7(Mon Aug 22 19:01:30 CEST 2022)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Default Encoding: UTF-8
+Language: en
+Country: null
+--></g></svg>
\ No newline at end of file
diff --git a/provider/docs/Register API Provider Domain.svg b/provider/docs/Register API Provider Domain.svg
new file mode 100644 (file)
index 0000000..9308c71
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="452px" preserveAspectRatio="none" style="width:635px;height:452px;background:#FFFFFF;" version="1.1" viewBox="0 0 635 452" width="635px" zoomAndPan="magnify"><defs/><g><rect fill="#DDDDDD" height="440.0547" style="stroke:#181818;stroke-width:0.5;" width="391" x="238" y="6"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="104" x="381.5" y="18.0669">CAPIF Internal</text><rect fill="#98FB98" height="251.4609" style="stroke:#000000;stroke-width:1.5;" width="563.5" x="10" y="98.2969"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="70" x2="70" y1="81.2969" y2="366.7578"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="280" x2="280" y1="81.2969" y2="366.7578"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="412" x2="412" y1="81.2969" y2="366.7578"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="568" x2="568" y1="81.2969" y2="366.7578"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="95" x="20" y="77.9951">ProviderClient</text><ellipse cx="70.5" cy="13.5" fill="#E2E2F0" rx="8" ry="8" style="stroke:#181818;stroke-width:0.5;"/><path d="M70.5,21.5 L70.5,48.5 M57.5,29.5 L83.5,29.5 M70.5,48.5 L57.5,63.5 M70.5,48.5 L83.5,63.5 " fill="none" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="95" x="20" y="378.7529">ProviderClient</text><ellipse cx="70.5" cy="390.5547" fill="#E2E2F0" rx="8" ry="8" style="stroke:#181818;stroke-width:0.5;"/><path d="M70.5,398.5547 L70.5,425.5547 M57.5,406.5547 L83.5,406.5547 M70.5,425.5547 L57.5,440.5547 M70.5,425.5547 L83.5,440.5547 " fill="none" style="stroke:#181818;stroke-width:0.5;"/><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="77" x="242" y="50"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="249" y="69.9951">capifcore</text><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="77" x="242" y="365.7578"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="249" y="385.7529">capifcore</text><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="131" x="347" y="50"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="354" y="69.9951">providermanager</text><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="131" x="347" y="365.7578"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="117" x="354" y="385.7529">providermanager</text><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="113" x="512" y="50"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="99" x="519" y="69.9951">publishservice</text><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="113" x="512" y="365.7578"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="99" x="519" y="385.7529">publishservice</text><path d="M10,98.2969 L74,98.2969 L74,105.4297 L64,115.4297 L10,115.4297 L10,98.2969 " fill="#98FB98" style="stroke:#000000;stroke-width:1.5;"/><rect fill="none" height="251.4609" style="stroke:#000000;stroke-width:1.5;" width="563.5" x="10" y="98.2969"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="19" x="25" y="111.3638">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="132" x="89" y="110.5073">[Provider Enrolment]</text><polygon fill="#181818" points="268.5,147.6953,278.5,151.6953,268.5,155.6953,272.5,151.6953" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="70.5" x2="274.5" y1="151.6953" y2="151.6953"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="137" x="77.5" y="131.4966">Register provider with</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="182" x="81.5" y="146.6294">APIProviderEnrolmentDetails</text><polygon fill="#181818" points="400.5,176.8281,410.5,180.8281,400.5,184.8281,404.5,180.8281" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="280.5" x2="406.5" y1="180.8281" y2="180.8281"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="108" x="287.5" y="175.7622">Register provider</text><line style="stroke:#181818;stroke-width:1.0;" x1="412.5" x2="454.5" y1="240.2266" y2="240.2266"/><line style="stroke:#181818;stroke-width:1.0;" x1="454.5" x2="454.5" y1="240.2266" y2="253.2266"/><line style="stroke:#181818;stroke-width:1.0;" x1="413.5" x2="454.5" y1="253.2266" y2="253.2266"/><polygon fill="#181818" points="423.5,249.2266,413.5,253.2266,423.5,257.2266,419.5,253.2266" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="136" x="419.5" y="204.895">Create apiProvDomId</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="123" x="423.5" y="220.0278">and apiProvFuncIds</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="138" x="423.5" y="235.1606">for provided functions</text><polygon fill="#181818" points="291.5,293.4922,281.5,297.4922,291.5,301.4922,287.5,297.4922" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="285.5" x2="411.5" y1="297.4922" y2="297.4922"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="81" x="297.5" y="277.2935">Provider with</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="101" x="301.5" y="292.4263">apfId and aefIds</text><polygon fill="#181818" points="81.5,337.7578,71.5,341.7578,81.5,345.7578,77.5,341.7578" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="75.5" x2="279.5" y1="341.7578" y2="341.7578"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="81" x="87.5" y="321.5591">Provider with</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="101" x="91.5" y="336.6919">apfId and aefIds</text><!--MD5=[e9ca64ac74341f2ea791570a7a08eb8d]
+@startuml Register API Provider Domain\r
+actor ProviderClient\r
+box "CAPIF Internal"\r
+participant capifcore\r
+participant providermanager\r
+participant publishservice\r
+\r
+end box\r
+\r
+alt#paleGreen #paleGreen Provider Enrolment\r
+    ProviderClient->capifcore: Register provider with\n APIProviderEnrolmentDetails\r
+    capifcore->providermanager:Register provider\r
+    providermanager->providermanager: Create apiProvDomId\n and apiProvFuncIds\n for provided functions\r
+    providermanager->capifcore: Provider with\n apfId and aefIds\r
+    capifcore->ProviderClient: Provider with\n apfId and aefIds\r
+end\r
+\r
+@enduml\r
+
+PlantUML version 1.2022.7(Mon Aug 22 19:01:30 CEST 2022)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Default Encoding: UTF-8
+Language: en
+Country: null
+--></g></svg>
\ No newline at end of file
diff --git a/provider/docs/Retrieve all published APIs.svg b/provider/docs/Retrieve all published APIs.svg
new file mode 100644 (file)
index 0000000..b2e1e22
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="379px" preserveAspectRatio="none" style="width:542px;height:379px;background:#FFFFFF;" version="1.1" viewBox="0 0 542 379" width="542px" zoomAndPan="magnify"><defs/><g><rect fill="#DDDDDD" height="367.6563" style="stroke:#181818;stroke-width:0.5;" width="320" x="210" y="6"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="104" x="318" y="18.0669">CAPIF Internal</text><rect fill="#FA8072" height="179.0625" style="stroke:#000000;stroke-width:1.5;" width="526" x="10" y="98.2969"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="70" x2="70" y1="81.2969" y2="294.3594"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="252" x2="252" y1="81.2969" y2="294.3594"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="469" x2="469" y1="81.2969" y2="294.3594"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="95" x="20" y="77.9951">ProviderClient</text><ellipse cx="70.5" cy="13.5" fill="#E2E2F0" rx="8" ry="8" style="stroke:#181818;stroke-width:0.5;"/><path d="M70.5,21.5 L70.5,48.5 M57.5,29.5 L83.5,29.5 M70.5,48.5 L57.5,63.5 M70.5,48.5 L83.5,63.5 " fill="none" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="95" x="20" y="306.3545">ProviderClient</text><ellipse cx="70.5" cy="318.1563" fill="#E2E2F0" rx="8" ry="8" style="stroke:#181818;stroke-width:0.5;"/><path d="M70.5,326.1563 L70.5,353.1563 M57.5,334.1563 L83.5,334.1563 M70.5,353.1563 L57.5,368.1563 M70.5,353.1563 L83.5,368.1563 " fill="none" style="stroke:#181818;stroke-width:0.5;"/><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="77" x="214" y="50"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="221" y="69.9951">capifcore</text><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="77" x="214" y="293.3594"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63" x="221" y="313.3545">capifcore</text><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="113" x="413" y="50"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="99" x="420" y="69.9951">publishservice</text><rect fill="#E2E2F0" height="30.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="113" x="413" y="293.3594"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="99" x="420" y="313.3545">publishservice</text><path d="M10,98.2969 L74,98.2969 L74,105.4297 L64,115.4297 L10,115.4297 L10,98.2969 " fill="#FA8072" style="stroke:#000000;stroke-width:1.5;"/><rect fill="none" height="179.0625" style="stroke:#000000;stroke-width:1.5;" width="526" x="10" y="98.2969"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="19" x="25" y="111.3638">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="138" x="89" y="110.5073">[Retrieve API Service]</text><polygon fill="#181818" points="240.5,147.6953,250.5,151.6953,240.5,155.6953,244.5,151.6953" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="70.5" x2="246.5" y1="151.6953" y2="151.6953"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="108" x="77.5" y="131.4966">Retrieve services</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="60" x="81.5" y="146.6294">with apfId</text><polygon fill="#181818" points="457.5,191.9609,467.5,195.9609,457.5,199.9609,461.5,195.9609" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="252.5" x2="463.5" y1="195.9609" y2="195.9609"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="135" x="259.5" y="175.7622">Retrieve all published</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="121" x="263.5" y="190.895">services from apfId</text><polygon fill="#181818" points="263.5,221.0938,253.5,225.0938,263.5,229.0938,259.5,225.0938" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="257.5" x2="468.5" y1="225.0938" y2="225.0938"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="193" x="269.5" y="220.0278">Array of ServiceAPIDescription</text><polygon fill="#181818" points="81.5,265.3594,71.5,269.3594,81.5,273.3594,77.5,269.3594" style="stroke:#181818;stroke-width:1.0;"/><line style="stroke:#181818;stroke-width:1.0;" x1="75.5" x2="251.5" y1="269.3594" y2="269.3594"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="158" x="87.5" y="249.1606">All ServiceAPIDescription</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="130" x="91.5" y="264.2935">published from apfId</text><!--MD5=[8c365ee76ca2cb00e4d30088bd8cb89c]
+@startuml  Retrieve all published APIs\r
+actor ProviderClient\r
+box "CAPIF Internal"\r
+participant capifcore\r
+participant publishservice\r
+end box\r
+\r
+alt#Salmon #Salmon Retrieve API Service\r
+    ProviderClient->capifcore: Retrieve services\n with apfId\r
+    capifcore->publishservice: Retrieve all published\n services from apfId\r
+    publishservice->capifcore: Array of ServiceAPIDescription\r
+    capifcore->ProviderClient: All ServiceAPIDescription\n published from apfId\r
+end\r
+\r
+@enduml\r
+
+PlantUML version 1.2022.7(Mon Aug 22 19:01:30 CEST 2022)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Default Encoding: UTF-8
+Language: en
+Country: null
+--></g></svg>
\ No newline at end of file
diff --git a/provider/docs/publishapi.plantuml b/provider/docs/publishapi.plantuml
new file mode 100644 (file)
index 0000000..28c7767
--- /dev/null
@@ -0,0 +1,25 @@
+@startuml Publish a new API
+actor ProviderClient
+box "CAPIF Internal"
+participant capifcore
+participant providermanager
+participant publishservice
+participant eventservice
+end box
+actor invoker
+
+alt#LightBlue #LightBlue Publish Service
+    ProviderClient->capifcore: Publish services\n with providerId\n andServiceAPIDescription
+    capifcore->publishservice: Publish services
+    publishservice->providermanager: Are AEFs registered\n for provider?
+    providermanager->publishservice: Ok
+    publishservice->publishservice: Create apiId
+    alt#Orange #Orange Subcribed Event Handling
+        publishservice->eventservice: Service published
+        eventservice->invoker: CAPIFEventDetail
+    end
+    publishservice->capifcore: ServiceAPIDescription\n with apiId
+    capifcore->ProviderClient: ServiceAPIDescription\n with apiId
+end
+
+@enduml
\ No newline at end of file
diff --git a/provider/docs/registerproviderdomain.plantuml b/provider/docs/registerproviderdomain.plantuml
new file mode 100644 (file)
index 0000000..a16150e
--- /dev/null
@@ -0,0 +1,18 @@
+@startuml Register API Provider Domain
+actor ProviderClient
+box "CAPIF Internal"
+participant capifcore
+participant providermanager
+participant publishservice
+
+end box
+
+alt#paleGreen #paleGreen Provider Enrolment
+    ProviderClient->capifcore: Register provider with\n APIProviderEnrolmentDetails
+    capifcore->providermanager:Register provider
+    providermanager->providermanager: Create apiProvDomId\n and apiProvFuncIds\n for provided functions
+    providermanager->capifcore: Provider with\n apfId and aefIds
+    capifcore->ProviderClient: Provider with\n apfId and aefIds
+end
+
+@enduml
\ No newline at end of file
diff --git a/provider/docs/retrievepublishedapi.plantuml b/provider/docs/retrievepublishedapi.plantuml
new file mode 100644 (file)
index 0000000..6fd3874
--- /dev/null
@@ -0,0 +1,15 @@
+@startuml  Retrieve all published APIs
+actor ProviderClient
+box "CAPIF Internal"
+participant capifcore
+participant publishservice
+end box
+
+alt#Salmon #Salmon Retrieve API Service
+    ProviderClient->capifcore: Retrieve services\n with apfId
+    capifcore->publishservice: Retrieve all published\n services from apfId
+    publishservice->capifcore: Array of ServiceAPIDescription
+    capifcore->ProviderClient: All ServiceAPIDescription\n published from apfId
+end
+
+@enduml
\ No newline at end of file