mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-04 03:09:33 -06:00
[docs-only] add more general API docs (#5301)
* add more general API docs * Apply suggestions from code review Co-authored-by: Phil Davis <phil@jankaritech.com> Co-authored-by: Kai <splitt3r@users.noreply.github.com> Co-authored-by: Phil Davis <phil@jankaritech.com> Co-authored-by: Kai <splitt3r@users.noreply.github.com>
This commit is contained in:
@@ -6,4 +6,48 @@ geekdocFilePath: _index.md
|
||||
geekdocCollapseSection: true
|
||||
---
|
||||
|
||||
{{< toc-tree >}}
|
||||
|
||||
Infinite Scale provides a large set of different **application programming interfaces (APIs)**. Infinite Scale is built by microservices. That means many calls to "functions" in the code are remote calls.
|
||||
|
||||
Basically we have two different API "universes": [HTTP](http) and [gRPC](grpc_apis).
|
||||
|
||||
{{< columns >}} <!-- begin columns block -->
|
||||
|
||||
{{< figure src="/ocis/static/http-logo.png" width="70%" alt="Image sourced from https://commons.wikimedia.org/ free of licenses" >}}
|
||||
<--->
|
||||
|
||||
{{< figure src="/ocis/static/grpc-logo.png" width="70%" alt="Image sourced from https://grpc.io/ under CC 4.0 BY license" >}}
|
||||
|
||||
{{< /columns >}}
|
||||
|
||||
|
||||
For inter-service-communication we are using mostly gRPC calls because it has some advantages. In the future, clients may decide to use gRPC directly to make use of these advantages.
|
||||
|
||||
{{< figure src="/ocis/static/ocis-apis.drawio.svg" class="page-image">}}
|
||||
|
||||
## [HTTP](http)
|
||||
|
||||
HTTP APIs are mostly used for client <-> server communication. Modern applications are embracing a [RESTful](https://en.wikipedia.org/wiki/Representational_state_transfer) software architecture style. REST APIs are using the HTTP protocol to transfer data between clients and servers. All our clients talk to the Server using HTTP APIs. This has legacy reasons and is well-supported across many platforms and technologies. Infinite Scale uses an [HTTP API gateway](../services/proxy) to route client requests to the correct service.
|
||||
|
||||
### OpenAPI
|
||||
|
||||
It is best practise to define APIs and their behavior by a spec. We are using the OpenAPI standard for all new APIs. The [OpenAPI Specification](https://swagger.io/specification/), previously known as the Swagger Specification, is a specification for a machine-readable interface definition language for describing, producing, consuming and visualizing RESTful web services. Previously part of the Swagger framework, it became a separate project in 2016, overseen by the OpenAPI Initiative, an open-source collaboration project of the Linux Foundation. Swagger and some other tools can generate code, documentation and test cases from interface files.
|
||||
|
||||
### RFC
|
||||
|
||||
Some APIs have become a de facto standard and are additionally covered by an [RFC](https://en.wikipedia.org/wiki/Request_for_Comments).
|
||||
|
||||
## [gRPC](grpc_apis)
|
||||
|
||||
In gRPC, a client application can directly call methods on a server application on a different machine as if it was a local object. This makes it easier to create distributed applications based on microservices. In gRPC we can define a service and specify the methods that can be called remotely. A gRPC client has a stub that provides the same methods and types as the server.
|
||||
Infinite Scale uses a [gRPC API Gateway](../services/gateway) to route the requests to the correct service.
|
||||
|
||||
### Protobuf
|
||||
|
||||
gRPC APIs are typically defined by [Protocol buffers](https://developers.google.com/protocol-buffers/docs/overview). The different client and server stubs are created from ``*.proto`` files by code generation tools.
|
||||
|
||||
## Versioning
|
||||
|
||||
There are different standards for API versioning: Through URL, through request parameter, through custom header and through content negotiation. Ocis uses the versioning by URL concept although this creates a big code footprint. The versioning follows [SemVer](https://semver.org). We update the major version number when breaking changes are needed. Clients can decide which major version they use through the request URL. The specific implementation is documented on each API.
|
||||
|
||||
|
||||
@@ -6,6 +6,58 @@ geekdocFilePath: _index.md
|
||||
geekdocCollapseSection: true
|
||||
---
|
||||
|
||||
{{< toc-tree >}}
|
||||
|
||||
## **R**emote **P**rocedure **C**alls
|
||||
|
||||
[gRPC](https://grpc.io) is a modern open source high performance Remote Procedure Call (RPC) framework that can run in any environment. It can efficiently connect services in and across data centers with pluggable support for load balancing, tracing, health checking and authentication. It is also applicable in last mile of distributed computing to connect devices, mobile applications and browsers to backend services.
|
||||
|
||||
## Advantages of gRPC
|
||||
|
||||
{{< columns >}}
|
||||
### {{< icon "gauge-high" >}} Performance
|
||||
|
||||
gRPC uses http/2 by default and is faster than REST. When using protocol buffers for encoding, the information comes on and off the wire much faster than JSON. Latency is an important factor in distributed systems. JSON encoding creates a noticeable factor of latency. For distributed systems and high data loads, gRPC can actually make an important difference. Other than that, gRPC supports multiple calls via the same channel and the connections are bidirectional. A single connection can transmit requests and responses at the same time. gRPC keeps connections open to reuse the same connection again which prevents latency and saves bandwidth.
|
||||
|
||||
<--->
|
||||
### {{< icon "helmet-safety" >}} Robustness
|
||||
|
||||
gRPC empowers better relationships between clients and servers. The rules of communication are strictly enforced. That is not the case in REST calls, where the client and the server can send and receive anything they like and hopefully the other end understands what to do with it. In gRPC, to make changes to the communication, both client and server need to change accordingly. This prevents mistakes specially in microservice architectures.
|
||||
{{< /columns >}}
|
||||
{{< columns >}}
|
||||
|
||||
### {{< icon "magnifying-glass-plus" >}} Debuggability
|
||||
|
||||
gRPC requests are re-using the same context and can be tracked or traced across multiple service boundaries.
|
||||
This helps to identify slow calls and see what is causing delays. It is possible to cancel requests which cancels
|
||||
them on all involved services.
|
||||
|
||||
<--->
|
||||
### {{< icon "boxes-stacked" >}} Microservices
|
||||
|
||||
gRPC has been evolving and has become the best option for communication between microservices because of its unmatched
|
||||
performance and its polyglot nature. One of the biggest strengths of microservices is the freedom of programming
|
||||
languages and technologies. By using gRPC we can leverage all the advantages of strictly enforced communication
|
||||
standards combined with freedom of choice between different programming languages - whichever would fit best.
|
||||
|
||||
{{< /columns >}}
|
||||
|
||||
{{< hint type=info title="gRPC Advantages" >}}
|
||||
|
||||
- http/2
|
||||
- protocol buffers
|
||||
- reusable connections
|
||||
- multi language support
|
||||
{{< /hint >}}
|
||||
|
||||
## CS3 APIs
|
||||
|
||||
{{< figure src="/ocis/static/cs3org.png" >}}
|
||||
|
||||
The [CS3 APIs](https://github.com/cs3org/cs3apis) connect storages and application providers.
|
||||
|
||||
The CS3 APIs follow Google and Uber API design guidelines, specially on error handling and naming convention. You can read more about these
|
||||
guidelines at https://cloud.google.com/apis/design/ and https://github.com/uber/prototool/blob/dev/style/README.md.
|
||||
|
||||
The CS3 APIs use [Protocol Buffers version 3 (proto3)](https://github.com/protocolbuffers/protobuf) as their
|
||||
Interface Definition Language (IDL) to define the API interface and the structure of the payload messages.
|
||||
|
||||
BIN
docs/ocis/static/cs3org.png
Normal file
BIN
docs/ocis/static/cs3org.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.8 KiB |
BIN
docs/ocis/static/grpc-logo.png
Normal file
BIN
docs/ocis/static/grpc-logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 158 KiB |
BIN
docs/ocis/static/http-logo.png
Normal file
BIN
docs/ocis/static/http-logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
286
docs/ocis/static/ocis-apis.drawio.svg
Normal file
286
docs/ocis/static/ocis-apis.drawio.svg
Normal file
@@ -0,0 +1,286 @@
|
||||
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="591px" height="291px" viewBox="-0.5 -0.5 591 291" content="<mxfile><diagram id="MSOW_Uv12eUtSs-tiTjN" name="Seite-1">7VpLb+IwEP41SLuXKonzgGOBPg67UrWttO3RTUyw1mDkmAL99WsnDnmYNIEmKUjtpfE4M8l8428ewABMFts7Blfz3zRAZGAZwXYApgPLMoE7Ev+kZJdIhq6VCEKGA3VTJnjE70gJDSVd4wBFhRs5pYTjVVHo0+US+bwgg4zRTfG2GSXFp65giDTBow+JLv2LAz5XUjP1S27cIxzO1aOHlpdsLGB6s/IkmsOAbnIicDMAE0YpT64W2wkiErwUl0TvtmJ3/2IMLXkTBYX7GyRr5duEYKlrGcpWxHep20JVICwWY/HaKyn0CV0LS+PNHHP0uIK+FG5E0IVszhdErExxqR6CGEfbyhc19+6Lc4PoAnG2E7cohX3sdynYar3JBSBFdZ7HXsmginm4N53BIi4UModRAhpK909PD0JyBznaQGHLJeJx41cmrkJ59WPF6Fa+foTYG/bRTw1MRtfLAMkHGPUAzjAhE0ooi3WBYTgGmkk5XfKcfBb/yfhwRv+hgoY5HU/aCYVtl0JhNQyF20Io7OoDa531gbWaotTGgXWqUQJnjRLoEyVXQ0nHZhlcy4IRgwKjCPtFCISbbPesSBwvXuTiykmX021+c7pTq4hDxnXLsfgWkzre1/EbBVoBK0VEeEnXzEcFVomnh4jncp4eN4YI5PitaP1QEJTqA8XxsVPxBqDECnt05RSNJO+l9PKlq2TKrjeV+KOZis/F3qdGR8WrqADl4yJw/wVfRbsDxgxF+B2+xltG8dRAgsOlDLyICRIRHEsOYdFfXKuNBQ4CqajCqfoYZSzrHmqo534yhE15NPzmESrk3R54VKrBWm1tyiLHqDHUHodGl8ihYU8cSuvgN4lSx3sgkVM6+96pJCr3emVD7ZHINC+RRabxyQA2ppE+0FIfR9kgpgF11BzWzNnDvioFd/iF05OpT7JnDo8F+oRHny7PHJ59H9ALPPpY2VuNQlvMn1Mb4jqnJVaZklykOscXrIaV8LS6BvS6lqSr7+5QOqlP45dQ2Jy+Cps+gd79eRBqH3wGGaY7XX0KOYSGcdynkI4Xa7SQCcufQvabCdsYeVVGM47IaFn2zBLmSyFfHs6eVZGrjlCnmTDt0gqp0OskFbrlVGicmAq9OkMtpkJ9Ug5jrp93KuxrVN6/TwdtiNW0D8mY+pLbadiHfDH7vAPs62bCdkalJA1OZJ/tlgy5dlfss/QJ+wLYl/v2uGP26RN2a+yrI98FNPR2NzzyisffPLWhd0c1hlrkUdW35ufNo89OZBU8EsvsVx0JmtlvY8DNfw==</diagram></mxfile>">
|
||||
<defs/>
|
||||
<g>
|
||||
<path d="M 30 20 C 6 20 0 40 19.2 44 C 0 52.8 21.6 72 37.2 64 C 48 80 84 80 96 64 C 120 64 120 48 105 40 C 120 24 96 8 75 16 C 60 4 36 4 30 20 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 40px; margin-left: 1px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
Client 1
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="60" y="44" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Client 1
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="230" y="10" width="120" height="60" fill="#0050ef" stroke="#001dbc" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 40px; margin-left: 231px;">
|
||||
<div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
HTTP Gateway
|
||||
<br/>
|
||||
(proxy service)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="290" y="44" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
HTTP Gateway...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 30 130 C 6 130 0 150 19.2 154 C 0 162.8 21.6 182 37.2 174 C 48 190 84 190 96 174 C 120 174 120 158 105 150 C 120 134 96 118 75 126 C 60 114 36 114 30 130 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 150px; margin-left: 1px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
Client 2
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="60" y="154" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Client 2
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 30 230 C 6 230 0 250 19.2 254 C 0 262.8 21.6 282 37.2 274 C 48 290 84 290 96 274 C 120 274 120 258 105 250 C 120 234 96 218 75 226 C 60 214 36 214 30 230 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 250px; margin-left: 1px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
Client 3
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="60" y="254" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
Client 3
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 108.4 118.68 L 224.65 43.46" fill="none" stroke="#001dbc" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 103.99 121.53 L 107.97 114.79 L 108.4 118.68 L 111.77 120.67 Z" fill="#001dbc" stroke="#001dbc" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<path d="M 229.06 40.61 L 225.09 47.35 L 224.65 43.46 L 221.28 41.47 Z" fill="#001dbc" stroke="#001dbc" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 81px; margin-left: 167px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
|
||||
HTTP
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="167" y="85" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
HTTP
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 92.5 209.85 L 225.99 44.95" fill="none" stroke="#001dbc" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 89.2 213.93 L 90.88 206.29 L 92.5 209.85 L 96.32 210.69 Z" fill="#001dbc" stroke="#001dbc" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<path d="M 229.3 40.87 L 227.61 48.51 L 225.99 44.95 L 222.17 44.11 Z" fill="#001dbc" stroke="#001dbc" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 128px; margin-left: 159px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
|
||||
HTTP
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="159" y="132" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
HTTP
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 126.37 40 L 223.63 40" fill="none" stroke="#001dbc" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 121.12 40 L 128.12 36.5 L 126.37 40 L 128.12 43.5 Z" fill="#001dbc" stroke="#001dbc" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<path d="M 228.88 40 L 221.88 43.5 L 223.63 40 L 221.88 36.5 Z" fill="#001dbc" stroke="#001dbc" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 41px; margin-left: 176px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
|
||||
HTTP
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="176" y="44" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
HTTP
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="470" y="10" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 40px; margin-left: 471px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
ocis service
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="530" y="44" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
ocis service
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="470" y="120" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 150px; margin-left: 471px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
ocis service
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="530" y="154" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
ocis service
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="470" y="230" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 260px; margin-left: 471px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
ocis service
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="530" y="264" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
ocis service
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 356.37 40 L 463.63 40" fill="none" stroke="#001dbc" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 351.12 40 L 358.12 36.5 L 356.37 40 L 358.12 43.5 Z" fill="#001dbc" stroke="#001dbc" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<path d="M 468.88 40 L 461.88 43.5 L 463.63 40 L 461.88 36.5 Z" fill="#001dbc" stroke="#001dbc" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 41px; margin-left: 411px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
|
||||
HTTP
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="411" y="44" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
HTTP
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="230" y="230" width="120" height="60" fill="#008a00" stroke="#005700" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 260px; margin-left: 231px;">
|
||||
<div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
GRPC Gateway
|
||||
<br/>
|
||||
(gateway service)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="290" y="264" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">
|
||||
GRPC Gateway...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 465.62 44.62 L 294.38 225.38" fill="none" stroke="#005700" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 469.23 40.81 L 466.96 48.3 L 465.62 44.62 L 461.88 43.49 Z" fill="#005700" stroke="#005700" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<path d="M 290.77 229.19 L 293.04 221.7 L 294.38 225.38 L 298.12 226.51 Z" fill="#005700" stroke="#005700" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 136px; margin-left: 380px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
|
||||
gRPC
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="380" y="139" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
gRPC
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 295.63 227.03 L 464.37 137.97" fill="none" stroke="#005700" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 290.99 229.48 L 295.55 223.12 L 295.63 227.03 L 298.81 229.31 Z" fill="#005700" stroke="#005700" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<path d="M 469.01 135.52 L 464.45 141.88 L 464.37 137.97 L 461.19 135.69 Z" fill="#005700" stroke="#005700" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 183px; margin-left: 381px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
|
||||
gRPC
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="381" y="186" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
gRPC
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 318.58 74.93 L 465.97 255.07" fill="none" stroke="#001dbc" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 315.25 70.87 L 322.39 74.07 L 318.58 74.93 L 316.98 78.5 Z" fill="#001dbc" stroke="#001dbc" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<path d="M 469.29 259.13 L 462.15 255.93 L 465.97 255.07 L 467.57 251.5 Z" fill="#001dbc" stroke="#001dbc" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 166px; margin-left: 393px;">
|
||||
<div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">
|
||||
HTTP
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="393" y="169" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">
|
||||
HTTP
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
</g>
|
||||
<switch>
|
||||
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
|
||||
<a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
|
||||
<text text-anchor="middle" font-size="10px" x="50%" y="100%">
|
||||
Viewer does not support full SVG 1.1
|
||||
</text>
|
||||
</a>
|
||||
</switch>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 24 KiB |
Reference in New Issue
Block a user