#6 Projekt: API cz.1

Projekt muszę zacząć oczywiście od zaprojektowania serwera, a konkretnie od API. Zdecydowałam się na REST API, które będzie bardzo proste, oraz na bazę danych MongoDB, aby dane mieć zawsze zapisywane w json.

Rozplanowałam sobie mniej więcej, jak będą wyglądały zapytania oraz odpowiedzi. Póki co, na razie chciałabym, żeby była opcja wysyłania nowych pytań z serii „Co wolisz?” oraz odpowiadania na nie (wyborze jedną z dwóch możliwych odpowiedzi).

Przykładowe zapytania/odpowiedzi

//POST	/questions
{
  "questions" : "Gdybyś był producentem telewizyjnym, wolałbyś",
  "options": 
  [ 
    "anulować znienawidzony przez siebie serial", 
    "przywrócić swój ulubiony serial na czas 1 sezonu" 
  ]
}
//GET	/questions/123
{
  "id" : 123,
  "questions" : "Co wolisz",
  "options": 
  [ 
    "mieć klawiaturę bez podpisanych klawiszy", 
    "być w stanie pisać tylko dwoma palcami na klawiaturze" 
  ],
  "votes": 
  [ 
    123, 
    87 
  ],
  "createdAt" : "2017-31-03"
}

Zastanawiałam się, jak to powinno wyglądać, jeśli chodzi o wysyłanie odpowiedzi. Póki co, to wymyśliłam coś takiego, że jeśli się wyśle „true”, to oznacza, że się zagłosowało na pierwszą opcję do danego pytania, a jeśli „false”, to na drugą opcję. Jednak mam trochę wątpliwości, może jakieś rady?

//POST	/vote/123
{
  "answer": true
}

Razem ze swoimi znajomymi z ciekawości sprawdzaliśmy, jak to wygląda w przypadku either.io. Poszperaliśmy trochę dzięki narzędziom developerskim w przeglądarce Chrome, oto fragment odpowiedzi:

{  
   "questions":[  
      {  
         "id":"2004",
         "live_id":"1029",
         "user_id":"5438",
         "option_1":"overdose on every drug at the same time",
         "option_2":"fall off a 100 story building",
         "option1_total":"571131",
         "option2_total":"504254",
         "comment_total":"905",
         "featured":"0",
         "published":"1",
         "slug":"ending-on-a-high-note",
         "prefix":"",
         "twitter_sentence":"Would you rather overdose on every drug at the same time or fall off a 100 story building?",
         "short_url":"http://wyr.be/Ap9DYg",
         "is_adult":"0",
         "gender":"b",
         "moreinfo":"If you need to ask about survival, you haven't thought this one through.",
         "created_on":"1329921220",
         "updated_on":"1330007989",
         "updated_by":"2788",
         "comments_enabled":"1",
         "title":"Ending on a High Note",
         "is_anonymous":"0",
         "device_id":"d29f4fdff1ab2556f73c59b01fc39201de0ba70f",
         "platform":"iPhone OS",
         "platform_version":"5.0.1",
         "liked":"0",
         "disliked":"0",
         "email":"ericschuey@aol.com",
         "user_is_deleted":"0",
         "display_name":"EpicLibido",
         "favorited":"0",
         "tags":[  
            {  
               "id":"5",
               "name":"Pain & Suffering",
               "published":"1",
               "created_on":"1326212553",
               "slug":"pain-suffering"
            }
         ]
      }
   ]
}

Nie wiem, co o tym myśleć, zastanawiam się, co tu robi informacja o numerze urządzenia, email czy nazwa platformy oraz jej wersja? Możecie to sami sprawdzić i się przekonać na własne oczy, wysyłając zapytanie GET na http://either.io/questions/next/100 np. za pomocą Postmana. A wy co myślicie o tym?

P.S. Postman jest właśnie klientem REST API, można zainstalować go jako wtyczkę do Chrome. Polecam, bo przydaje się szczególnie przy korzystaniu z API, żeby sprawdzić, co zwraca. Ja najczęściej korzystam z Postmana do testowania swojego api.