Improve OpenAPI schema

- Removes unneeded wrapping in examples
- Adds `:format` attributes
This commit is contained in:
Egor Kislitsyn 2020-04-21 23:30:24 +04:00
parent ed3974af24
commit f0238d010a
No known key found for this signature in database
GPG Key ID: 1B49CB15B71E7805
12 changed files with 225 additions and 233 deletions

View File

@ -17,8 +17,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do
type: :object, type: :object,
properties: %{ properties: %{
acct: %Schema{type: :string}, acct: %Schema{type: :string},
avatar_static: %Schema{type: :string}, avatar_static: %Schema{type: :string, format: :uri},
avatar: %Schema{type: :string}, avatar: %Schema{type: :string, format: :uri},
bot: %Schema{type: :boolean}, bot: %Schema{type: :boolean},
created_at: %Schema{type: :string, format: "date-time"}, created_at: %Schema{type: :string, format: "date-time"},
display_name: %Schema{type: :string}, display_name: %Schema{type: :string},
@ -27,13 +27,13 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do
follow_requests_count: %Schema{type: :integer}, follow_requests_count: %Schema{type: :integer},
followers_count: %Schema{type: :integer}, followers_count: %Schema{type: :integer},
following_count: %Schema{type: :integer}, following_count: %Schema{type: :integer},
header_static: %Schema{type: :string}, header_static: %Schema{type: :string, format: :uri},
header: %Schema{type: :string}, header: %Schema{type: :string, format: :uri},
id: %Schema{type: :string}, id: %Schema{type: :string},
locked: %Schema{type: :boolean}, locked: %Schema{type: :boolean},
note: %Schema{type: :string}, note: %Schema{type: :string, format: :html},
statuses_count: %Schema{type: :integer}, statuses_count: %Schema{type: :integer},
url: %Schema{type: :string}, url: %Schema{type: :string, format: :uri},
username: %Schema{type: :string}, username: %Schema{type: :string},
pleroma: %Schema{ pleroma: %Schema{
type: :object, type: :object,
@ -104,80 +104,78 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do
} }
}, },
example: %{ example: %{
"JSON" => %{ "acct" => "foobar",
"acct" => "foobar", "avatar" => "https://mypleroma.com/images/avi.png",
"avatar" => "https://mypleroma.com/images/avi.png", "avatar_static" => "https://mypleroma.com/images/avi.png",
"avatar_static" => "https://mypleroma.com/images/avi.png", "bot" => false,
"bot" => false, "created_at" => "2020-03-24T13:05:58.000Z",
"created_at" => "2020-03-24T13:05:58.000Z", "display_name" => "foobar",
"display_name" => "foobar", "emojis" => [],
"emojis" => [], "fields" => [],
"follow_requests_count" => 0,
"followers_count" => 0,
"following_count" => 1,
"header" => "https://mypleroma.com/images/banner.png",
"header_static" => "https://mypleroma.com/images/banner.png",
"id" => "9tKi3esbG7OQgZ2920",
"locked" => false,
"note" => "cofe",
"pleroma" => %{
"allow_following_move" => true,
"background_image" => nil,
"confirmation_pending" => true,
"hide_favorites" => true,
"hide_followers" => false,
"hide_followers_count" => false,
"hide_follows" => false,
"hide_follows_count" => false,
"is_admin" => false,
"is_moderator" => false,
"skip_thread_containment" => false,
"chat_token" =>
"SFMyNTY.g3QAAAACZAAEZGF0YW0AAAASOXRLaTNlc2JHN09RZ1oyOTIwZAAGc2lnbmVkbgYARNplS3EB.Mb_Iaqew2bN1I1o79B_iP7encmVCpTKC4OtHZRxdjKc",
"unread_conversation_count" => 0,
"tags" => [],
"notification_settings" => %{
"followers" => true,
"follows" => true,
"non_followers" => true,
"non_follows" => true,
"privacy_option" => false
},
"relationship" => %{
"blocked_by" => false,
"blocking" => false,
"domain_blocking" => false,
"endorsed" => false,
"followed_by" => false,
"following" => false,
"id" => "9tKi3esbG7OQgZ2920",
"muting" => false,
"muting_notifications" => false,
"requested" => false,
"showing_reblogs" => true,
"subscribing" => false
},
"settings_store" => %{
"pleroma-fe" => %{}
}
},
"source" => %{
"fields" => [], "fields" => [],
"follow_requests_count" => 0, "note" => "foobar",
"followers_count" => 0,
"following_count" => 1,
"header" => "https://mypleroma.com/images/banner.png",
"header_static" => "https://mypleroma.com/images/banner.png",
"id" => "9tKi3esbG7OQgZ2920",
"locked" => false,
"note" => "cofe",
"pleroma" => %{ "pleroma" => %{
"allow_following_move" => true, "actor_type" => "Person",
"background_image" => nil, "discoverable" => false,
"confirmation_pending" => true, "no_rich_text" => false,
"hide_favorites" => true, "show_role" => true
"hide_followers" => false,
"hide_followers_count" => false,
"hide_follows" => false,
"hide_follows_count" => false,
"is_admin" => false,
"is_moderator" => false,
"skip_thread_containment" => false,
"chat_token" =>
"SFMyNTY.g3QAAAACZAAEZGF0YW0AAAASOXRLaTNlc2JHN09RZ1oyOTIwZAAGc2lnbmVkbgYARNplS3EB.Mb_Iaqew2bN1I1o79B_iP7encmVCpTKC4OtHZRxdjKc",
"unread_conversation_count" => 0,
"tags" => [],
"notification_settings" => %{
"followers" => true,
"follows" => true,
"non_followers" => true,
"non_follows" => true,
"privacy_option" => false
},
"relationship" => %{
"blocked_by" => false,
"blocking" => false,
"domain_blocking" => false,
"endorsed" => false,
"followed_by" => false,
"following" => false,
"id" => "9tKi3esbG7OQgZ2920",
"muting" => false,
"muting_notifications" => false,
"requested" => false,
"showing_reblogs" => true,
"subscribing" => false
},
"settings_store" => %{
"pleroma-fe" => %{}
}
}, },
"source" => %{ "privacy" => "public",
"fields" => [], "sensitive" => false
"note" => "foobar", },
"pleroma" => %{ "statuses_count" => 0,
"actor_type" => "Person", "url" => "https://mypleroma.com/users/foobar",
"discoverable" => false, "username" => "foobar"
"no_rich_text" => false,
"show_role" => true
},
"privacy" => "public",
"sensitive" => false
},
"statuses_count" => 0,
"url" => "https://mypleroma.com/users/foobar",
"username" => "foobar"
}
} }
}) })
end end

View File

@ -23,7 +23,11 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest do
"The email address to be used for login. Required when `account_activation_required` is enabled.", "The email address to be used for login. Required when `account_activation_required` is enabled.",
format: :email format: :email
}, },
password: %Schema{type: :string, description: "The password to be used for login"}, password: %Schema{
type: :string,
description: "The password to be used for login",
format: :password
},
agreement: %Schema{ agreement: %Schema{
type: :boolean, type: :boolean,
description: description:

View File

@ -15,15 +15,13 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse do
token_type: %Schema{type: :string}, token_type: %Schema{type: :string},
access_token: %Schema{type: :string}, access_token: %Schema{type: :string},
scope: %Schema{type: :array, items: %Schema{type: :string}}, scope: %Schema{type: :array, items: %Schema{type: :string}},
created_at: %Schema{type: :integer} created_at: %Schema{type: :integer, format: :"date-time"}
}, },
example: %{ example: %{
"JSON" => %{ "access_token" => "i9hAVVzGld86Pl5JtLtizKoXVvtTlSCJvwaugCxvZzk",
"access_token" => "i9hAVVzGld86Pl5JtLtizKoXVvtTlSCJvwaugCxvZzk", "created_at" => 1_585_918_714,
"created_at" => 1_585_918_714, "scope" => ["read", "write", "follow", "push"],
"scope" => ["read", "write", "follow", "push"], "token_type" => "Bearer"
"token_type" => "Bearer"
}
} }
}) })
end end

View File

@ -13,19 +13,17 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountEmoji do
type: :object, type: :object,
properties: %{ properties: %{
shortcode: %Schema{type: :string}, shortcode: %Schema{type: :string},
url: %Schema{type: :string}, url: %Schema{type: :string, format: :uri},
static_url: %Schema{type: :string}, static_url: %Schema{type: :string, format: :uri},
visible_in_picker: %Schema{type: :boolean} visible_in_picker: %Schema{type: :boolean}
}, },
example: %{ example: %{
"JSON" => %{ "shortcode" => "fatyoshi",
"shortcode" => "fatyoshi", "url" =>
"url" => "https://files.mastodon.social/custom_emojis/images/000/023/920/original/e57ecb623faa0dc9.png",
"https://files.mastodon.social/custom_emojis/images/000/023/920/original/e57ecb623faa0dc9.png", "static_url" =>
"static_url" => "https://files.mastodon.social/custom_emojis/images/000/023/920/static/e57ecb623faa0dc9.png",
"https://files.mastodon.social/custom_emojis/images/000/023/920/static/e57ecb623faa0dc9.png", "visible_in_picker" => true
"visible_in_picker" => true
}
} }
}) })
end end

View File

@ -13,16 +13,14 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountField do
type: :object, type: :object,
properties: %{ properties: %{
name: %Schema{type: :string}, name: %Schema{type: :string},
value: %Schema{type: :string}, value: %Schema{type: :string, format: :html},
verified_at: %Schema{type: :string, format: "date-time", nullable: true} verified_at: %Schema{type: :string, format: :"date-time", nullable: true}
}, },
example: %{ example: %{
"JSON" => %{ "name" => "Website",
"name" => "Website", "value" =>
"value" => "<a href=\"https://pleroma.com\" rel=\"me nofollow noopener noreferrer\" target=\"_blank\"><span class=\"invisible\">https://</span><span class=\"\">pleroma.com</span><span class=\"invisible\"></span></a>",
"<a href=\"https://pleroma.com\" rel=\"me nofollow noopener noreferrer\" target=\"_blank\"><span class=\"invisible\">https://</span><span class=\"\">pleroma.com</span><span class=\"invisible\"></span></a>", "verified_at" => "2019-08-29T04:14:55.571+00:00"
"verified_at" => "2019-08-29T04:14:55.571+00:00"
}
} }
}) })
end end

View File

@ -17,10 +17,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountAttributeField do
}, },
required: [:name, :value], required: [:name, :value],
example: %{ example: %{
"JSON" => %{ "name" => "Website",
"name" => "Website", "value" => "https://pleroma.com"
"value" => "https://pleroma.com"
}
} }
}) })
end end

View File

@ -11,7 +11,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountFollowsRequest do
description: "POST body for muting an account", description: "POST body for muting an account",
type: :object, type: :object,
properties: %{ properties: %{
uri: %Schema{type: :string} uri: %Schema{type: :string, format: :uri}
}, },
required: [:uri] required: [:uri]
}) })

View File

@ -26,20 +26,18 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AccountRelationship do
subscribing: %Schema{type: :boolean} subscribing: %Schema{type: :boolean}
}, },
example: %{ example: %{
"JSON" => %{ "blocked_by" => false,
"blocked_by" => false, "blocking" => false,
"blocking" => false, "domain_blocking" => false,
"domain_blocking" => false, "endorsed" => false,
"endorsed" => false, "followed_by" => false,
"followed_by" => false, "following" => false,
"following" => false, "id" => "9tKi3esbG7OQgZ2920",
"id" => "9tKi3esbG7OQgZ2920", "muting" => false,
"muting" => false, "muting_notifications" => false,
"muting_notifications" => false, "requested" => false,
"requested" => false, "showing_reblogs" => true,
"showing_reblogs" => true, "subscribing" => false
"subscribing" => false
}
} }
}) })
end end

View File

@ -21,7 +21,11 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AppCreateRequest do
type: :string, type: :string,
description: "Space separated list of scopes. If none is provided, defaults to `read`." description: "Space separated list of scopes. If none is provided, defaults to `read`."
}, },
website: %Schema{type: :string, description: "A URL to the homepage of your app"} website: %Schema{
type: :string,
description: "A URL to the homepage of your app",
format: :uri
}
}, },
required: [:client_name, :redirect_uris], required: [:client_name, :redirect_uris],
example: %{ example: %{

View File

@ -16,9 +16,9 @@ defmodule Pleroma.Web.ApiSpec.Schemas.AppCreateResponse do
name: %Schema{type: :string}, name: %Schema{type: :string},
client_id: %Schema{type: :string}, client_id: %Schema{type: :string},
client_secret: %Schema{type: :string}, client_secret: %Schema{type: :string},
redirect_uri: %Schema{type: :string}, redirect_uri: %Schema{type: :string, format: :uri},
vapid_key: %Schema{type: :string}, vapid_key: %Schema{type: :string},
website: %Schema{type: :string, nullable: true} website: %Schema{type: :string, nullable: true, format: :uri}
}, },
example: %{ example: %{
"id" => "123", "id" => "123",

View File

@ -16,10 +16,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.List do
title: %Schema{type: :string} title: %Schema{type: :string}
}, },
example: %{ example: %{
"JSON" => %{ "id" => "123",
"id" => "123", "title" => "my list"
"title" => "my list"
}
} }
}) })
end end

View File

@ -21,7 +21,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do
type: :object, type: :object,
properties: %{ properties: %{
name: %Schema{type: :string}, name: %Schema{type: :string},
website: %Schema{type: :string, nullable: true} website: %Schema{type: :string, nullable: true, format: :uri}
} }
}, },
bookmarked: %Schema{type: :boolean}, bookmarked: %Schema{type: :boolean},
@ -29,16 +29,16 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do
type: :object, type: :object,
nullable: true, nullable: true,
properties: %{ properties: %{
type: %Schema{type: :string}, type: %Schema{type: :string, enum: ["link", "photo", "video", "rich"]},
provider_name: %Schema{type: :string}, provider_name: %Schema{type: :string, nullable: true},
provider_url: %Schema{type: :string}, provider_url: %Schema{type: :string, format: :uri},
url: %Schema{type: :string}, url: %Schema{type: :string, format: :uri},
image: %Schema{type: :string}, image: %Schema{type: :string, nullable: true, format: :uri},
title: %Schema{type: :string}, title: %Schema{type: :string},
description: %Schema{type: :string} description: %Schema{type: :string}
} }
}, },
content: %Schema{type: :string}, content: %Schema{type: :string, format: :html},
created_at: %Schema{type: :string, format: "date-time"}, created_at: %Schema{type: :string, format: "date-time"},
emojis: %Schema{type: :array, items: AccountEmoji}, emojis: %Schema{type: :array, items: AccountEmoji},
favourited: %Schema{type: :boolean}, favourited: %Schema{type: :boolean},
@ -53,10 +53,10 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do
type: :object, type: :object,
properties: %{ properties: %{
id: %Schema{type: :string}, id: %Schema{type: :string},
url: %Schema{type: :string}, url: %Schema{type: :string, format: :uri},
remote_url: %Schema{type: :string}, remote_url: %Schema{type: :string, format: :uri},
preview_url: %Schema{type: :string}, preview_url: %Schema{type: :string, format: :uri},
text_url: %Schema{type: :string}, text_url: %Schema{type: :string, format: :uri},
description: %Schema{type: :string}, description: %Schema{type: :string},
type: %Schema{type: :string, enum: ["image", "video", "audio", "unknown"]}, type: %Schema{type: :string, enum: ["image", "video", "audio", "unknown"]},
pleroma: %Schema{ pleroma: %Schema{
@ -74,7 +74,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do
id: %Schema{type: :string}, id: %Schema{type: :string},
acct: %Schema{type: :string}, acct: %Schema{type: :string},
username: %Schema{type: :string}, username: %Schema{type: :string},
url: %Schema{type: :string} url: %Schema{type: :string, format: :uri}
} }
} }
}, },
@ -120,108 +120,106 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do
type: :object, type: :object,
properties: %{ properties: %{
name: %Schema{type: :string}, name: %Schema{type: :string},
url: %Schema{type: :string} url: %Schema{type: :string, format: :uri}
} }
} }
}, },
uri: %Schema{type: :string}, uri: %Schema{type: :string, format: :uri},
url: %Schema{type: :string}, url: %Schema{type: :string, nullable: true, format: :uri},
visibility: VisibilityScope visibility: VisibilityScope
}, },
example: %{ example: %{
"JSON" => %{ "account" => %{
"account" => %{ "acct" => "nick6",
"acct" => "nick6", "avatar" => "http://localhost:4001/images/avi.png",
"avatar" => "http://localhost:4001/images/avi.png", "avatar_static" => "http://localhost:4001/images/avi.png",
"avatar_static" => "http://localhost:4001/images/avi.png", "bot" => false,
"bot" => false,
"created_at" => "2020-04-07T19:48:51.000Z",
"display_name" => "Test テスト User 6",
"emojis" => [],
"fields" => [],
"followers_count" => 1,
"following_count" => 0,
"header" => "http://localhost:4001/images/banner.png",
"header_static" => "http://localhost:4001/images/banner.png",
"id" => "9toJCsKN7SmSf3aj5c",
"locked" => false,
"note" => "Tester Number 6",
"pleroma" => %{
"background_image" => nil,
"confirmation_pending" => false,
"hide_favorites" => true,
"hide_followers" => false,
"hide_followers_count" => false,
"hide_follows" => false,
"hide_follows_count" => false,
"is_admin" => false,
"is_moderator" => false,
"relationship" => %{
"blocked_by" => false,
"blocking" => false,
"domain_blocking" => false,
"endorsed" => false,
"followed_by" => false,
"following" => true,
"id" => "9toJCsKN7SmSf3aj5c",
"muting" => false,
"muting_notifications" => false,
"requested" => false,
"showing_reblogs" => true,
"subscribing" => false
},
"skip_thread_containment" => false,
"tags" => []
},
"source" => %{
"fields" => [],
"note" => "Tester Number 6",
"pleroma" => %{"actor_type" => "Person", "discoverable" => false},
"sensitive" => false
},
"statuses_count" => 1,
"url" => "http://localhost:4001/users/nick6",
"username" => "nick6"
},
"application" => %{"name" => "Web", "website" => nil},
"bookmarked" => false,
"card" => nil,
"content" => "foobar",
"created_at" => "2020-04-07T19:48:51.000Z", "created_at" => "2020-04-07T19:48:51.000Z",
"display_name" => "Test テスト User 6",
"emojis" => [], "emojis" => [],
"favourited" => false, "fields" => [],
"favourites_count" => 0, "followers_count" => 1,
"id" => "9toJCu5YZW7O7gfvH6", "following_count" => 0,
"in_reply_to_account_id" => nil, "header" => "http://localhost:4001/images/banner.png",
"in_reply_to_id" => nil, "header_static" => "http://localhost:4001/images/banner.png",
"language" => nil, "id" => "9toJCsKN7SmSf3aj5c",
"media_attachments" => [], "locked" => false,
"mentions" => [], "note" => "Tester Number 6",
"muted" => false,
"pinned" => false,
"pleroma" => %{ "pleroma" => %{
"content" => %{"text/plain" => "foobar"}, "background_image" => nil,
"conversation_id" => 345_972, "confirmation_pending" => false,
"direct_conversation_id" => nil, "hide_favorites" => true,
"emoji_reactions" => [], "hide_followers" => false,
"expires_at" => nil, "hide_followers_count" => false,
"in_reply_to_account_acct" => nil, "hide_follows" => false,
"local" => true, "hide_follows_count" => false,
"spoiler_text" => %{"text/plain" => ""}, "is_admin" => false,
"thread_muted" => false "is_moderator" => false,
"relationship" => %{
"blocked_by" => false,
"blocking" => false,
"domain_blocking" => false,
"endorsed" => false,
"followed_by" => false,
"following" => true,
"id" => "9toJCsKN7SmSf3aj5c",
"muting" => false,
"muting_notifications" => false,
"requested" => false,
"showing_reblogs" => true,
"subscribing" => false
},
"skip_thread_containment" => false,
"tags" => []
}, },
"poll" => nil, "source" => %{
"reblog" => nil, "fields" => [],
"reblogged" => false, "note" => "Tester Number 6",
"reblogs_count" => 0, "pleroma" => %{"actor_type" => "Person", "discoverable" => false},
"replies_count" => 0, "sensitive" => false
"sensitive" => false, },
"spoiler_text" => "", "statuses_count" => 1,
"tags" => [], "url" => "http://localhost:4001/users/nick6",
"uri" => "http://localhost:4001/objects/0f5dad44-0e9e-4610-b377-a2631e499190", "username" => "nick6"
"url" => "http://localhost:4001/notice/9toJCu5YZW7O7gfvH6", },
"visibility" => "private" "application" => %{"name" => "Web", "website" => nil},
} "bookmarked" => false,
"card" => nil,
"content" => "foobar",
"created_at" => "2020-04-07T19:48:51.000Z",
"emojis" => [],
"favourited" => false,
"favourites_count" => 0,
"id" => "9toJCu5YZW7O7gfvH6",
"in_reply_to_account_id" => nil,
"in_reply_to_id" => nil,
"language" => nil,
"media_attachments" => [],
"mentions" => [],
"muted" => false,
"pinned" => false,
"pleroma" => %{
"content" => %{"text/plain" => "foobar"},
"conversation_id" => 345_972,
"direct_conversation_id" => nil,
"emoji_reactions" => [],
"expires_at" => nil,
"in_reply_to_account_acct" => nil,
"local" => true,
"spoiler_text" => %{"text/plain" => ""},
"thread_muted" => false
},
"poll" => nil,
"reblog" => nil,
"reblogged" => false,
"reblogs_count" => 0,
"replies_count" => 0,
"sensitive" => false,
"spoiler_text" => "",
"tags" => [],
"uri" => "http://localhost:4001/objects/0f5dad44-0e9e-4610-b377-a2631e499190",
"url" => "http://localhost:4001/notice/9toJCu5YZW7O7gfvH6",
"visibility" => "private"
} }
}) })
end end