ルーティング
いかにしてHTTPメソッドがコントローラやアクションにマップされるのか。
ルートの説明
MastodonはRuby on Railsを使用し、ルーターはconfig/routes.rb
で規定されます。Ruby on Rails routing guideに細かい説明がありますが、このページではMastodonがいかにしてルーティングするかを簡単に説明します。
ルーティング手順
namespace
はあるコントローラのディレクトリにマップされるためのプレフィクスです。resources
はその名前空間のディレクトリ内のコントローラにマップされます。scope
はmodule
のコントローラに渡します。例えば、次の短縮されたコードについて考えてみましょう。
最初に利用可能なリソースは:statuses
です。これは、:api
とv1
という名前空間下にネストされます。結果として/api/v1/statusesにルーティングされます。only
は特定の許可されたメソッドを定義します。これはapp/controllers/api/v1/statuses_controller.rb
のコントローラで定義されています。
/api/v1/statuses内には、追加のリソースが定義された:statuses
モジュールへのスコープがあります。そのリソースへのコントローラはapp/controllers/api/v1/statuses/
にあります。例えば:favourite
はapp/controllers/api/v1/statuses/favourites_controller.rb
内の#create
アクションによってハンドルされ、:unfavourite
は同一のコントローラの#destroy
アクションでハンドルされます。
このスコープ内にはあらゆるmember
へのカスタムメソッドが定義されています。つまり、全てのstatusはapp/controllers/api/v1/statuses_controller.rb
でコントロールされ、GET /api/v1/statuses/:id/context
にマップされます。
利用可能なメソッド
:index
HTTP GETへのマップで、リストに使用します。コントローラ内の#index
アクションによってハンドルされます。
:show
HTTP GETへのマップで、単一のビューに使用します。コントローラ内の#show
アクションによってハンドルされます。
:create
HTTP POSTへのマップです。コントローラ内の#create
アクションによってハンドルされます。
:update
HTTP PUTへのマップです。コントローラ内の#update
アクションによってハンドルされます。
:destroy
HTTP DELETEへのマップです。コントローラ内の#destroy
アクションによってハンドルされます。
.well-known
/.well-known/host-meta
Extensible Resource Descriptor (XRD)です。Webfingerの存在を公表します。
/.well-known/nodeinfo
Maps to NodeInfo 2.0 endpoint at /nodeinfo/2.0
, used for advertising software name and version, protocols, usage statistics, and whether registrations are open.
/.well-know/webfinger
Used for discovering ActivityPub actor id. See Spec compliance > WebFinger for more information.
/.well-known/change-password
Maps to account settings page.
/.well-known/keybase-proof-config
Used for integration with Keybase, defining which usernames are acceptable and where proofs may be checked.
Public URIs
/users/username
= user URI/users/username/remote_follow
= remote follow dialog/users/username/statuses/id
= status URI/@username
= “toots” tab/@username/with_replies
= “toots and replies” tab/@username/media
= “media” tab/@username/tagged/:hashtag
= tagged statuses by user/@username/:status_id
= status permalink/@username/:status_id/embed
= embeddable version/interact/:status_id
= remote interaction dialog/explore
= profile directory/explore/:hashtag
= profiles with this hashtag in bio/public
= public timeline preview/about
= landing page/about/more
= extended description/terms
= terms of service
API
- /api/oembed
- /api/proofs
- /api/v1
- statuses [create, show, destroy]
- reblogged_by [index]
- favourited_by [index]
- reblog [create]
- unreblog [POST reblog#destroy]
- favourite [create]
- unfavourite [POST favourites#destroy]
- bookmark [create]
- unbookmark [POST bookmarks#destroy]
- mute [create]
- unmute [POST mutes#destroy]
- pin [create]
- unpin [POST pins#destroy]
- context [GET]
- timelines
- home [show]
- public [show]
- tag [show]
- list [show]
- streaming [index]
- custom_emojis [index]
- suggestions [index, destroy]
- scheduled_statuses [index, show, update, destroy]
- preferences [index]
- conversations [index, destroy]
- read [POST]
- media [create, update]
- blocks [index]
- mutes [index]
- favourites [index]
- bookmarks [index]
- reports [create]
- trends [index]
- filters [index, create, show, update, destroy]
- endorsements [index]
- markers [index, create]
- apps [create]
- verify_credentials [credentials#show]
- instance [show]
- peers [index]
- activity [show]
- domain_blocks [show, create, destroy]
- directory [show]
- follow_requests [index]
- authorize [POST]
- reject [POST]
- notifications [index, show]
- clear [POST]
- dismiss [POST]
- accounts
- verify_credentials [GET credentials#show]
- update_credentials [PATCH credentials#update]
- search [show (search#index)]
- relationships [index]
- accounts [create, show]
- statuses [index accounts/statuses]
- followers [index accounts/follower_accounts]
- following [index accounts/following_accounts]
- lists [index accounts/lists]
- identity_proofs [index accounts/identity_proofs]
- follow [POST]
- unfollow [POST]
- block [POST]
- unblock [POST]
- mute [POST]
- unmute [POST]
- pin [POST]
- unpin [POST]
- lists [index, create, show, update, destroy]
- accounts [POST accounts/pins#destroy]
- featured_tags [index, create, destroy]
- suggestions [GET suggestions#index]
- polls [create, show]
- votes [create polls/votes]
- push
- subscription [create, show, update, destroy]
- admin
- accounts [index, show]
- enable [POST]
- unsilence [POST]
- unsuspend [POST]
- approve [POST]
- reject [POST]
- action [create account_actions]
- reports [index, show]
- assign_to_self [POST]
- unassign [POST]
- reopen [POST]
- resolve [POST]
- accounts [index, show]
- statuses [create, show, destroy]
- /api/v2
- search [GET search#index]
最終更新 February 12, 2020 · このページを改善する
他の言語:
English