# 创建自定义 API

**URL:** https://meta.discourse.org/t/create-custom-apis/184054
**Category:** Development
**Created:** [2021年三月22日 15:27 UTC](https://meta.discourse.org/t/create-custom-apis/184054 "2021-03-22T15:27:34Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![Ravi\_Teja\_Varma](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ravi_teja_varma/32/195200_2.png) [@Ravi\_Teja\_Varma](https://meta.discourse.org/u/Ravi_Teja_Varma)
#### Post date: [2021年三月22日 15:27 UTC](https://meta.discourse.org/t/create-custom-apis/184054/1 "2021-03-22T15:27:34Z")

</div>

在 Discourse 论坛上创建自定义 API 的最佳方法是什么？

例如：我想创建一个 GET 请求，返回用户数量（users.count）、主题数量（topics.count）和分类数量（categories.count）。我该如何将此 API 添加到论坛中？

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2021年三月22日 15:37 UTC](https://meta.discourse.org/t/create-custom-apis/184054/2 "2021-03-22T15:37:18Z")

</div>

您需要编写一个插件。请参阅 [Discourse 插件创建入门指南 第一部分：创建基础插件](https://meta.discourse.org/t/beginners-guide-to-creating-discourse-plugins-part-1-creating-a-basic-plugin/30515)

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2021年三月22日 16:12 UTC](https://meta.discourse.org/t/create-custom-apis/184054/3 "2021-03-22T16:12:15Z")

</div>

/admin/about.json

我想这已经包含大部分内容了。或者也许只是 `/about.json`。

---

<div class="post-metadata">

### Author: ![Ravi\_Teja\_Varma](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ravi_teja_varma/32/195200_2.png) [@Ravi\_Teja\_Varma](https://meta.discourse.org/u/Ravi_Teja_Varma)
#### Post date: [2021年三月22日 16:53 UTC](https://meta.discourse.org/t/create-custom-apis/184054/4 "2021-03-22T16:53:56Z")

</div>

数据并不完全相同，因此我想创建一个自定义的 JSON API。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2021年三月22日 17:27 UTC](https://meta.discourse.org/t/create-custom-apis/184054/5 "2021-03-22T17:27:58Z")

</div>

我一直将 [GitHub - discourse/discourse-subscriptions: A Discourse plugin that allows payments and subscription management via Stripe. · GitHub](https://github.com/discourse/discourse-subscriptions) 作为添加模型的参考（你并不需要完整的模型，但 [discourse-subscriptions/config/routes.rb at main · discourse/discourse-subscriptions · GitHub](https://github.com/discourse/discourse-subscriptions/blob/main/config/routes.rb) 展示了如何添加路由的示例。加上 `add_to_class`，这基本上就是你所需了解的全部内容了。祝你好运！

---

<div class="post-metadata">

### Author: ![Ravi\_Teja\_Varma](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ravi_teja_varma/32/195200_2.png) [@Ravi\_Teja\_Varma](https://meta.discourse.org/u/Ravi_Teja_Varma)
#### Post date: [2021年三月23日 04:18 UTC](https://meta.discourse.org/t/create-custom-apis/184054/6 "2021-03-23T04:18:23Z")

</div>

谢谢 @pfaffman  
我会查看一下。

---

<div class="post-metadata">

### Author: ![Ravi\_Teja\_Varma](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ravi_teja_varma/32/195200_2.png) [@Ravi\_Teja\_Varma](https://meta.discourse.org/u/Ravi_Teja_Varma)
#### Post date: [2021年四月1日 05:16 UTC](https://meta.discourse.org/t/create-custom-apis/184054/7 "2021-04-01T05:16:54Z")

</div>

我无法通过插件创建自定义页面/API。  
是否有适合初学者的指南可供参考？或者有没有展示基本步骤的文章？  
我已按照 Discourse 指南操作，成功为插件添加了设置，但无法创建新页面。  
@pfaffman

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2021年四月1日 12:00 UTC](https://meta.discourse.org/t/create-custom-apis/184054/8 "2021-04-01T12:00:47Z")

</div>

我是以订阅插件为参考来编写自己的插件的。插件生成器会生成一个带有新路由的插件。这比较复杂，因为你需要同时处理 Rails 和 Ember 两部分。如果你只想添加一个 Rails（API）路由，那并不难。（其他人可能会说，只添加一个 Ember 路由也很简单。）

你是需要一个新的页面在浏览器中渲染，还是只需要后端支持？
