2013-01-23 98 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();