2013-01-23 63 views
1

我被困在如何构建我正在开发的RESTful API的URL上。 我的问题来自这样一个事实,即有时我需要从一次调用中获取多个连接的表。RESTful API Url Structuring

在一个实例中,我需要得到两个表。我有一个名为courses的表和一个名为topics的表。我需要获得course_name行,然后查看属于该课程的所有主题。

在另一个例子中,我需要得到三张表。我需要加入topicspartsbullet_points

我应该如何在这些URL中引用这些内容?

它应该是这样的东西? 要获得一门课程:

courses/:course_id/ 

为了得到一个过程,它的主题:

courses/:course_id/topics 

为了得到一个主题,它的部件,它的要点:

courses/:course_id/topics/:topic_id/parts 

我新的这个,所以我想知道我应该如何真正接近的网址结构。

+0

你不应该考虑持久性模型。你也应该最初远离聚合......换言之,“要获得课程和它的主题”......应该不会发生。 HATEOAS和个人资源可以更好地解决这个问题。每个子URL都只能代表子集合/资源。除此之外,URL结构本身看起来很明智。 –

+0

感谢您的回应马特!我想我明白你在说什么。继续将URI段附加到URL上不好吗?是否有最大数量的细分应包含? 这也意味着我不应该通过一个请求抓取连接的表吗? – Sneaksta

+0

我认为这个想法是你的资源应该被分成好模型。就像你应该有'$ list = $ model-> getCourseList()','$ course = $ model-> getCourse($ c_id)','$ course-> getTopicList()','$ course-> getTopic $ T_ID)';每个人都有一份工作。通过这种方式,您可以拨打电话并获取该特定请求所需的资源。 – Supericy

回答

2

我认为你建议的URL结构是好的。它也很好地对应于良好的资源布局。

// courses 
$list = $model->getCourseList(); 

// courses/c_id 
$course = $model->getCourse($c_id); 

    // courses/c_id/topics 
    $courseTopicList = $course->getTopicList(); 

    // courses/c_id/topics/t_id 
    $courseTopic = $course->getTopic($t_id); 

     // courses/c_id/topics/t_id/parts 
     $courseTopicParts = $topic->getParts();