---
# System prepended metadata

title: Comparison of API Patterns
tags: [API, Cross Platform, App, Protocol, System Design, Distributed System, Software, Server]

---

# Comparison of API Patterns
###### tags: `Server` `System Design` `Distributed System` `Protocol` `Software` `API` `Cross Platform` `App`

SOAP vs. RESTful vs. GraphQL vs. RPC vs. gRPC

![](https://i.imgur.com/6aokRpl.png)

## Comparison of Connection Rules

> Clients <- APIs rules -> Servers

![](https://i.imgur.com/FKDotld.png)

### RESTful API

methods of *Create-get, Read-post, Update-put, Delete-patch*

```nginx
GET example.com/api/v2/users
```

### RPC (Remote Procedure Calls)

methods of *ReadOnly-get & OtherActions-post*, take advantage of flexibility, verb-like methods, it's better used in microservices communications than clients.

```nginx
POST example.com/api/chat.postMsg
```

![](https://i.imgur.com/Wzegimu.png)

#### pros (vs. REST)

* Protocol Buffer vs. xml, json
  |             |   protobuf   |   json   |
  |:-----------:|:------------:|:--------:|
  |   payload   | encoding bin | raw data |
  | performance |  5x faster   |    1x    |

* HTTP/2 - serial request in a single connection

#### cons

* en / decode overhead
* web client on browsers not supported (due to HTTP/2)

### GraphQL

can freely fetch desired data fields in a single call, but difficult for server to handle, for client to do advanced operation

```nginx
GET https://api.line.me/v2/list
{Users{userId,name}}
```

## todo: Benchmarks

1. gRPC vs. REST
2. vm cluster (servs / nas / san) vs. container vs. application

---

## ref

[What is RPC? gRPC Introduction. - ByteByteGo](https://www.youtube.com/watch?v=gnchfOojMk4&ab_channel=ByteByteGo)
[8 Key Data Structures That Power Modern Databases - ByteByteGo](https://www.youtube.com/watch?v=W_v05d_2RTo&ab_channel=ByteByteGo)
[gRPC Crash Course - Modes, Examples, Pros & Cons and more - Hussein Nasser](https://www.youtube.com/watch?v=Yw4rkaTc0f8&ab_channel=HusseinNasser)

[nginx - github](https://github.com/nginx/agent)