我的API在第二次调用时返回响应

时间:2018-04-09 10:02:30

标签: php api laravel-5 access endpoint

我正在创建一个简单的API端点,它返回事件的访问代码。

如果事件没有访问代码,则应为其分配一个。然后,它会检查它当前是公共还是私有。如果是private,则返回访问代码,如果是public,则返回空字符串。

public function getAc($eventId) {
    // Pull event
    $event = $this->eventService->api->getEventForce($eventId);


    // If no access code for the event, generate one and update event record accordingly
    if ($event->access_code == null) {
        $access_code = $this->generateAccessCode();
        $affected = DB::update('update events set access_code = ? where id = ?', [$access_code, $eventId]);
    }

    // Is the event currently private? return access code
    if ($event->privacy=='private') {
        return $event->access_code;
    }

    // Is it public ? return empty string.
    else {
        return '';
    }
}

我的问题是,对于null的私有事件,它只在第二次调用时返回访问代码(在postman上测试)。这不是适当的API行为。

1 个答案:

答案 0 :(得分:1)

问题是$event对象没有自动更新。

首先,您尝试查询某个事件,如果它不存在,则创建一个事件,但之后您需要再次查询。

因此,在if ($event->access_code == null) {部分,最后您需要再次从数据库加载事件:

public function getAc($eventId) {
    // Pull event
    $event = $this->eventService->api->getEventForce($eventId);

    // If no access code for the event, generate one and update event record accordingly
    if ($event->access_code == null) {
        $access_code = $this->generateAccessCode();
        $affected = DB::update('update events set access_code = ? where id = ?', [$access_code, $eventId]);
        // Pull event again
        $event = $this->eventService->api->getEventForce($eventId);
    }

    // Is the event currently private? return access code
    if ($event->privacy=='private') {
        return $event->access_code;
    }

    // Is it public ? return empty string.
    else {
        return '';
    }
}

希望有所帮助

修改

我最初的假设是错误的,我认为(出于某种原因)缺少整个记录,并且您创建了一个新的事件行。多数民众赞成在假 无论是否有访问代码,事件记录都应该有privacy设置。

我怀疑,你的问题不在这里(在这个课程中),它应该是逻辑中的一些其他错误 - 例如api->getEventForce没有返回没有的事件访问代码。

尝试在查询后立即打印事件对象;我怀疑这将是一个空洞的结果