\documentclass[border=0.2cm]{standalone} \usepackage{tikz} \usetikzlibrary{shapes} \begin{document} \begin{tikzpicture} \node[rectangle,draw,text height=3cm,minimum width=4cm] (server) at (0,0) {API}; \node[rectangle,draw,] (rust_server) at (0, 0) {\small Rust}; \node[rectangle,draw,text height=1.5cm,minimum width=2cm] (client-python) at (-6,2) {Client 1}; \node[rectangle,draw,] (python_client) at (-6, 2) {\small Python}; \node[rectangle,draw,text height=1.5cm,minimum width=2cm] (client-rust) at (-6,-2) {Client 2}; \node[rectangle,draw,] (rust_client) at (-6, -2) {\small Rust}; \draw[-latex,thick] (client-python) -- (server) node[midway,fill=white]{SOAP}; \draw[-latex,thick] (client-rust) -- (server) node[midway,fill=white]{REST}; \end{tikzpicture} \end{document}