-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
/api.json
がOpenAPI Specとしてvalidでない
#10632
Comments
従来の OpenAPIの OpenAPIの OpenAPIの OpenAPIの OpenAPIの
とりあえず以上です。もしかしたらもっと別の相違点があるかもしれませんが、とりあえずこれらを解消するような修正をした上でまたバリデーションにかけてみて様子を見ることにします。 |
json-schema内のスキーマは古いOpenAPIだかswaggerの仕様に基づいて書かれているはず |
apiエンドポイントのresもそう |
(😕と言われても相当昔からこれだったので許してほしい) |
少し前のapi.jsonなので今は改善されているかもしれませんが、20611個の警告、281個の弱警告があったのでほとんど準拠できていないと思います。 |
定義をmisskey-jsでしてバックエンドに読ませたほうがいい説 |
とりあえず私のドラフトPRでは
少なくとも悪くはないと思います。現時点のmisskey-jsは型定義が不足していて、他の箇所でエラーを引き起こしてしまってもいましたから。ただ私はバックエンドがどのような仕組みで動いていて、どのように開発されているのかをまだ理解できていないため、なんとも言えません。 |
変更点が巨大になってもいいので抜本的に改善したい (ので今までずっと放置されている) |
なるほど、わかりました。 現時点の私のPRではOpenAPIのSpecの型を手動で書くようにしているのですが、これには未対応な部分がありますし、誤りがあるかもしれません。ですので抜本的な改善をするのであれば、早いうちに何かしらのツールを使った公式JSON SchemaからTypeScriptの型への変換をしておくのがよいと考えます。まずはこのことについて、どういったツールを使うべきかなどいろいろと調べてみようと思います。 また |
それはもうSchemaTypeとして存在する |
すみません説明不足でした。 私は @tamaina さんの言う 私はまだソースコードのほとんどを読めておらず、何がどうなっているのかをまったく理解できていません。おかしなことを言ってしまっていたら申し訳ありません。 |
genOpenapiSpec自体の問題でバリデーションエラーがあるならそれは修正を行った方がいい
一部というか内側というか本筋の部分 |
API出力の検査やサーバーコード内で見かけるPacked<"Hoge">の型定義はJSON Schema v2記述をSchemaTypeで生成することで成立している JSON Schema v2は、refはbackend/src/models/json-schema配下に、各エンドポイントはそのエンドポイント構成スクリプト(backend/src/server/api/endopoints/**/*.ts)のmeta.resに書かれている
これが代表例なんだけど、optionalプロパティはJSON Schema v2由来。おそらくJSON Schema v3でバリデーションしようとしてエラーが出ていると私は解釈している。 |
話は戻るけど、genOpenapiSpec自体はapi.json生成の末端中の末端なので、そこに型定義を書いたところでMisskeyコード全体の型定義を厳密化させることは不可能 |
要は古いJSON Schemaバージョンに基づいているからバリデーションが通らないという主張ではあるんだけど、Misskeyのことなので(?)古い規格に照らしても記述がいい加減な箇所はある気がする |
OpenAPIのバージョン2.0として読み込ませた場合 5870個の警告、543個の弱警告があったのでいずれにせよtamainaさんの言う通り、おかしいです。 |
ただ今後ミスによってバリデーションエラーを引き起こしてしまわないように、この関数自体にも型定義があるとよいのではないかとは考えています。
手書きに関しては #10625 の方にも書きましたが、Collaboratorの方々の意見を聞いていない段階で何かツールを使って自動生成するのは少しよくないのではと考えた末の暫定的なものです。実装の方向性が間違っていないことが確認できた時点でこのことについては判断を仰ぐつもりでいました。
これに関してはこの説明を聞いて概ね理解しました。ありがとうございます。
それは確かにその通りです。ただとりあえずは末端のわかりやすく実装しやすい部分から考えていって、最終的に内部的で全体的な型定義のよりよい形を模索していくべきなのではないかという考え方をしました。もちろんこれはMisskey開発についての知識を持たない私の考え方ですので、これよりも適した実装手順があるのであればそちらを選ぶべきです。抜本的な改善とのことですし、内部的な部分から厳密に定義していくのもよいと思います。「抜本的」の度合いを見誤ってしまっていました。 |
リクエストのスキーマは3で書いているのでそれはそれで警告が出そう |
#12403 で解決されたようなので閉じます。 |
💡 Summary
Misskeyでは
/api.json
からOpenAPIのSpecを得ることができますが、これをswagger-cliでバリデーションしてみたところ、6034行のエラーメッセージが出力されました。その多くは許可されていないadditional propertiesが含まれていることが原因だと思われます。🥰 Expected Behavior
swagger-cliのバリデーションでエラーが出ない。
🤬 Actual Behavior
swagger-cliのバリデーションで多くのエラーが出力される。
📝 Steps to Reproduce
swagger-cli validate https://misskey.example/api.json
を実行する📌 Environment
Misskey version: 少なくとも v13.11.3 と 14f30af
Your OS:
Your browser:
これはドラフトPR #10625 の作業をしているときに見付けた問題です。そのPRでの解決を試みています。
The text was updated successfully, but these errors were encountered: