冥冥乃志スマートフォン用の表示で見る冥冥乃志ソフトウェア開発会社でチームマネージャをしているエンジニアの雑記。アウトプットは少なめです。この広告は、90日以上更新していないブログに表示しています。2017-06-26Swaggerを使ってライブラリ非公開のAPIにライブラリを作って見たProgramming仕事で少し検証をしてみたくなったAPIサービスが見つかりました。APIだからどうとでもなるとは言え、フレームワーク的な部分のコードをゴリゴリと書きたくないですよね。本末転倒な楽しさに目覚めてしまう可能性もありますし(そっちかよ)。いうわけで、API仕様も公開されていますし、Swaggerの練習がてら自力でライブラリ生成をして使ってみました。Specificationの開発者ツールフレームワークで、APIのデザイン、ドキュメンテーション、開発を支援する仕様とツール群を提供しています。APIを作るための書式です。ツール類は以下の3つで構成されています。Specificationからインタラクティブな機能を持った開発者向けドキュメントを生成するツールとその開発ドキュメントそのもの今回サーバスタブは作っていません。Specification細かい仕様はここを読みましょう。Specification定義はymlでもjsonでも書けます。エンドポイントや認証フロー、APIのIn/Outの各種データモデルを定義することができます。Lambdaという構成にできる方がいいのではないかと思っています。フロントエンドとサービスを切り離して、コンテキストでわけられた各種サービスのエンドポイントをつなぎ合わせて構成に、というとなんかMicroserviceっぽいですね。この構成にする上で、開発者に公開するドキュメントやライブラリは必須なわけですが、設計レベルからのアプローチで設計ドキュメントと実装の一致を測りやすくなっているのは良い感触です。コンテキストの境界づけをAPIを提供する単位で行うことができ、別のコンテキストの裏口的なアクセスをなるべくブロックすることができます。いう意味でDDDの各種実装パターンにおける実際のアーキテクチャのリファレンスが少し変わるのではないかと(パターン自体はあまり変わらないのではないかと思っている)。いうわけで使ってみたswagger.yaml自体は仕様に基づいて書いただけなので、リポジトリをご査収ください。github.comで、検証している時にいくつか課題があったのでその内容をメモっておきます。UIからアクセスしてみようとすると、こんなエラーが出ました。UIからのアクセスは当然Originではないので、許可されていませんよ、ということ。Codeの拡張機能使っても同様でした。Codeの拡張機能もnode使っているんでしょうね。ちなみに、認証に限らずAPI全般で同じ状態でした。今回のケースはサーバサイドの問題です。どこまで許可するか、とかセキュリティの問題はありそうですが、少なくとも開発、テスト時に必要なレベルは許可されていないとツール類からアクセスできないのは非常に不便ですね。プルリクエスト投げた時にコメントで追加しています。生成されるライブラリの認証フロー実装Javaのライブラリを出力して、検証してみました。サンプルとして一緒に出力されるコードが以下のような感じなんですよね。}}出力されるライブラリはOAuthの認証フローは実装されず、AccessTokenをセットする前提になっている。認証フローは別のライブラリなどで考慮する出力仕様のようです。他の言語のライブラリ出力ではどうなるかまでは検証していませんが、まあこの辺は知っていればいいだけの話かと。あと、若干クラス名のつけ方が自動生成っぽいというかアレですね。この辺はもしかしたら定義の仕方次第で回避方法はあるのかも。ちなみに、ライブラリからのアクセスはうまくいきました。いちいち出力して検証するわけには行かないので、クロスドメインの問題自体はサーバサイドで対応した方がいいですが、回避方法というか検証方法自体は残されている、ということで。まとめ(というかお願いプリーズ)自力でライブラリを生成して試せる、というのは非常にありがたいですね。API開発者は各言語用のライブラリを提供する必要はないので、swagger.yamlだけでも公開しておいてくれると非常に助かります。はいはいAPIね、Javaがねーじゃんそっ閉じってことをしなくて済むようになるので。ちなみに私はSwaggerファイルの仕様というか、長くなりがちなファイル構成に不満がありまくりんぐでしたので、RAMLに乗り換えてみようかと思っております。Frameworkプロジェクトと開発者アセットのCDを回す前回の続きです。mao-instant...2017-07-01Swaggerのファイル仕様が不満だったのでRAMLを触って比較してみる前回、こういうの書きました。»プロフィールid:mao_instantlifeソフトウェア開発会社でチームマネージャをしているエンジニアの雑記。アウトプットは少なめです。月別アーカイブ参加グループプログラミングはてなブログをはじめよう!mao_instantlifeさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。