93752
とあるAPIにRESTを採用していない、と書いてあるのですがどういう意味ですか？

> HTTP APIはすべてPOSTで、リクエスト/レスポンスともにJSON形式

[MisskeyはRESTを採用していません。](https://misskey-hub.net/docs/api/)

* * *

REST  
・通信は、HTTPではなくてもよい？  
・リクエスト/レスポンスは、JSONではなくてもよい？  
・統一インターフェースと書いてありましたが、そもそもAPIで、統一ではないインターフェースがあるのですか？

SOAP  
・通信は、HTTPではなくてもよい？  
・リクエスト/レスポンスは、XML？
CC BY-SA 4.0
2023-02-03T04:11:14.450
93691
2023-02-08T04:22:49.173
7886
question
api
「RESTを採用していないAPI」とはどういう意味ですか？ 通信プロトコルやリクエスト/レスポンス形式と関係がありますか？
REST API とは、一般的に RESTful な特徴を持つ API を指します。

> RESTを採用していません

とわざわざ言及しているからには、この RESTful な特徴を持たないという事なのでしょう。

* * *

では、 RESTful な特徴とは何かと言うと、 [RESTful APIとは何なのか -
Qiita](https://qiita.com/NagaokaKenichi/items/0647c30ef596cedf4bf2#rest%E3%81%AE%E5%8E%9F%E5%89%87)
の説明を借りれば、以下のようなものです。

>   * アドレス可能性(Addressability)
>     * 提供する情報がURIを通して表現できること。全ての情報はURIで表現される一意なアドレスを持っていること。
>   * ステートレス性(Stateless)
>     *
> HTTPをベースにしたステートレスなクライアント/サーバプロトコルであること。セッション等の状態管理はせず、やり取りされる情報はそれ自体で完結して解釈できること。
>   * 接続性(Connectability)
>     * 情報の内部に、別の情報や(その情報の別の)状態へのリンクを含めることができること。
>   * 統一インターフェース(Uniform Interface)
>     * 情報の操作(取得、作成、更新、削除)は全てHTTPメソッド(GET、POST、PUT、DELETE)を利用すること。
>

ここでその [Misskey API](https://misskey-hub.net/docs/api/) とやらを見てみると、

> [APIリファレンス](https://misskey-hub.net/docs/api/endpoints.html)

URI に `create` とか `delete` などが含まれており、 URI
がリソース指向になっていない、すなわちアドレス可能性が無いといえそうです。

>
```

>     https://{host}/api/miauth/{session}/check
>  
```

URL にセッションIDが含まれていて、とてもステートレスとは言い難そうです。

>   * HTTP APIはすべてPOSTで
>

CRUD 操作 (作成、取得、更新、削除) が全て POST メソッドになっていて、統一インターフェースになっていませんね。

* * *

と RESTful の原則に全く則っていないことがよくわかります。

ただ、それが良い悪いという話ではありません。 念のため。

なお、以下のコメントですが

> REST  
>  ・通信は、HTTPではなくてもよい？  
>  ・リクエスト/レスポンスは、JSONではなくてもよい？  
>  ・統一インターフェースと書いてありましたが、そもそもAPIで、統一ではないインターフェースがあるのですか？

REST は規約ではないので、 RESTful に則れば HTTP でなくとも REST API だと言い張れそうですが、 HTTP
以外は見たことないですね。 SMB あたりなら準拠できそう。

一方、メッセージのフォーマットが JSON でないものは割と一般的で、むしろ登場当初は XML が使われることが多くありました。

統一インターフェースの説明は、上の説明の通りです。

> SOAP  
>  ・通信は、HTTPではなくてもよい？  
>  ・リクエスト/レスポンスは、XML？

SOAP はプロトコルとして仕様が決まっており、メッセージのフォーマットは XML が必須です。

アプリケーション層の伝送は、 HTTP の他、 SMTP なども使えるようですが、実用上としてはほぼ HTTP 一択です。
CC BY-SA 4.0
2023-02-07T16:40:10.707
93752
2023-02-08T04:22:49.173
2023-02-08T04:22:49.173
8237
8237
93691
answer