小编mau*_*fle的帖子

REST API:请求主体为JSON还是普通POST数据?

我目前正在构建REST API.所有GET方法目前都使用JSON作为响应格式.什么是POST和PUT操作的最佳实践?在请求正文或普通POST中使用JSON?我找不到任何关于此事的内容.

我看到Twitter使用POST,例如:https: //dev.twitter.com/docs/api/1/post/direct_messages/new

使用JSON格式有什么好处?我从github得到的API控制器(已完成一半)需要JSON.真想知道为什么我会选择使用它.

php api rest post json

25
推荐指数
2
解决办法
2万
查看次数

API作为网站和移动应用的核心

我对完整的架构理念有不同的疑问.我希望有经验的人可以帮助我,因为我几乎陷入了各种可能性.

我打算重写一个社区网站.我们的客户希望将来能够使用原生移动应用程序.所以我需要考虑到这一点.因此,我决定基于PHP框架Kohana创建一个100%REST API架构.我选择了Kohana,因为这样可以非常轻松地将内部API扩展到其他服务器而无需额外的努力.(Kohana威胁内部URL请求不是HTTP,因此开头没有太多开销,可以通过一些次要的代码更改扩展到HTTP).

起初,API将是私有的,但稍后我们可能会公开让更多服务轻松连接到我们.

De基本REST结构如下:

  1. /猫
  2. /猫/ 1
  3. /猫/ 1 /自定义

例如,'custom'可能是'孩子'.

同样的:

  1. /广告
  2. /出价书
  3. /用户
  4. /横幅
  5. 等等..

这些是API的完美实体,因为移动应用程序肯定会使用所有这些功能.

所以我们可以得出结论,网站的核心是REST.所以基本上我想让网站成为API的客户端,就像将来的本机应用程序一样.这样维护似乎更容易.

令我担心的是,除此之外还有更多(管理上传文件,发票,发票自动化,广告自动化等).上传文件需要通过网站访问API.这是常见做法吗?如果我不这样做,网站将上传逻辑,这使网站不再是客户端和应用程序本身.因此,移动应用程序甚至无法上传,API和网站都需要知道上传文件夹(重复逻辑).

我想到了创建以下模块:

  1. 社区API
  2. 社区网站

Api似乎是核心.但是......那些cronjobs等呢?实际上他们不应该成为网站的一部分,因为这只是一个"客户".我觉得他们应该直接与模型或API进行交互.所以基本上API更像是通往核心的网关,并认为我需要这个:

  1. 以社区为核心
    • 楷模
    • Cronjobs
    • 汽车邮件(cronjobs的一部分)
      • 发票等
  2. 社区API
    • 通过HTTP与核心模型交互
  3. 社区网站
    • 网站
    • 管理员

核心cronjobs是REST结构的一个例外.他们是唯一一个可以在不通过api的情况下更改数据的人.至少这是我的想法,因为它们属于核心,而API则位于核心之上.

但设计似乎错了.操作应该只通过API!

替代方案:

  1. 以社区为核心
    • 楷模
  2. 社区API
    • 通过HTTP与核心模型交互
  3. 社区业务
    • Cronjobs
    • 汽车邮件(cronjobs的一部分)
      • 发票等
  4. 社区网站
    • 网站
    • 管理员

这对我来说设计看起来更好. 思维导图插图http://mauserrifle.nl/mindmap.jpg

主要问题

1)

cronjobs应该通过API或Core模型进行操作吗?

2)

我的发票cronjob当然需要一个主要网站风格的模板.但如果我的cronjob是业务或核心的一部分,它将无法了解我的主要网站.解决这个问题有什么意义?

3)

我的网站将使用小胡子作为模板引擎.(php和javascript都可以解析这些模板).我认为直接使用api进行ajax调用,但后来意识到:

该站点从api获取数据,将时间戳格式化为模板的日期(Ymd),然后呈现.如果我让javascript直接调用api,javascript也必须有逻辑(格式化).这是重复的代码!感觉像唯一的解决方案是调用网站的ajax(调用api和格式)并返回格式化的json.我对吗?

但是....删除广告等简单的调用可以直接通过api(例如DELETE:/ ads/1

我收到各种电话....

对此更好的解决方案?

4)

总体而言:我的架构太复杂了吗?我应该考虑哪些替代方案?

我很想听听你的反馈!

php architecture rest kohana hmvc

7
推荐指数
1
解决办法
2962
查看次数

Symfony4:Doctrine2工作但PHPUnit测试中没有连接(内核启动)

Symfony4中的奇怪问题:Doctrine有效,我可以使用验证模式,创建数据库等php bin/console doctrine:schema:create.但我的PHPUnit测试没有连接.通过运行./bin/phpunit我得到SQLSTATE[HY000] [2002] No such file or directory例外.

我按照文档中有关启动内核的步骤进行操作:http: //symfony.com/doc/current/testing/doctrine.html

我的代码:

class PersistingResultTest extends KernelTestCase
{
    protected $em;

    protected function setUp()
    {
        $kernel = self::bootKernel();

        $this->em = $kernel->getContainer()
            ->get('doctrine')
            ->getManager();
    }

    public function testPersistingLogFile()
    {
        // Just a simple schema command to test connection
        $tool = new SchemaTool($this->em);
        $tool->createSchema($this->em->getMetadataFactory()->getAllMetadata());
    }


   protected function tearDown()
    {
        parent::tearDown();

        $this->em->close();
        $this->em = null; // avoid memory leaks
    }
}
Run Code Online (Sandbox Code Playgroud)

谁知道为什么会这样?一个bug?

编辑:

显然.env文件读取不正确.我将DATABASE_URL …

php symfony doctrine-orm symfony4

7
推荐指数
1
解决办法
601
查看次数

由于JOIN/WHERE过滤器较小,PostgreSQL Select语句非常慢

2013-05-29:更新了最新配置和额外信息的问题.之前我在虚拟机映像中进行测试.现在我正在测试生产性服务器,它更好地反映了现实世界.现在问题应该完全清楚了.如果您以前曾帮助我,请仔细阅读

目前我发现PostgreSQL中的查询速度非常慢,但我不明白它的速度有多慢.我把它缩小了一点,所以它在这里发布要小得多(而且速度要快得多,但仍然很慢!).

小背景:在这个项目中,我有属于用户的广告.用户是该国家/地区的一部分.一个区域可以有多个子区域,因此区域表是一棵树.将网络分配给区域.在网络上过滤时,它应该过滤该区域及其树中的所有区域子项.因为我无法查询无尽的树,所以我有一张桌子可以压扁这棵完整的树.

因此,通过1个查询,(SELECT area_id FROM network_area_flatdeep WHERE network_id = 1)我获得了属于网络1的所有区域: 63, 64, 65, 66, 67, 68, 69, 70

这使得查询变得非常容易.

慢查询(在测试所有内容之前一直是VACUUM ANALYZED):

EXPLAIN ANALYZE SELECT a0_.id  AS id0
FROM   advert a0_
       INNER JOIN member m6_
               ON a0_.user_id = m6_.id
       INNER JOIN area a7_
               ON m6_.area_id = a7_.id
WHERE  a0_.status IN ( 1 )
       AND m6_.status IN ( 1 )
       AND a7_.id IN (SELECT area_id FROM network_area_flatdeep WHERE network_id IN (1))
ORDER  BY a0_.created_date DESC
LIMIT  60;
                                                                                 QUERY PLAN …
Run Code Online (Sandbox Code Playgroud)

php postgresql doctrine-orm

6
推荐指数
1
解决办法
1203
查看次数

postgresql中缓慢的OR语句

我目前有一个由于OR语句而缓慢的postgresql查询.它显然没有使用索引.到目前为止,重写此查询失败.

查询:

EXPLAIN ANALYZE SELECT a0_.id AS id0
FROM   advert a0_
       INNER JOIN advertcategory a1_
               ON a0_.advert_category_id = a1_.id
WHERE  a0_.advert_category_id IN ( 1136 )
        OR a1_.parent_id IN ( 1136 )
ORDER  BY a0_.created_date DESC
LIMIT  15;  

                                                                           QUERY PLAN                                                                                
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=0.00..27542.49 rows=15 width=12) (actual time=1.658..50.809 rows=15 loops=1)
   ->  Nested Loop  (cost=0.00..1691109.07 rows=921 width=12) (actual time=1.657..50.790 rows=15 loops=1)
         ->  Index Scan Backward using advert_created_date_idx on advert a0_  (cost=0.00..670300.17 rows=353804 width=16) (actual time=0.013..16.449 rows=12405 loops=1)
         ->  Index Scan using advertcategory_pkey on …
Run Code Online (Sandbox Code Playgroud)

sql postgresql

6
推荐指数
1
解决办法
1434
查看次数

标签 统计

php ×4

doctrine-orm ×2

postgresql ×2

rest ×2

api ×1

architecture ×1

hmvc ×1

json ×1

kohana ×1

post ×1

sql ×1

symfony ×1

symfony4 ×1