Czy jest gdzieś lista rekomendacji różnych frameworków REST opartych na Pythonie do wykorzystania na serwerze do pisania własnych interfejsów API RESTful? Najlepiej z zaletami i wadami.
Tutaj możesz dodać rekomendacje. :)
python
web-services
rest
frameworks
dariusz
źródło
źródło
Odpowiedzi:
Podczas projektowania interfejsu API RESTful należy zachować ostrożność, jeśli chodzi o połączenie GET i POST, tak jakby były one tym samym. To proste, aby ten błąd z Django 's poglądów opartych funkcyjnych i CherryPy jest domyślnym dyspozytora, choć obie ramy teraz dostarczyć sposób wokół tego problemu ( poglądów opartych na klasach i MethodDispatcher , odpowiednio).
Czasowniki HTTP są bardzo ważne w REST i jeśli nie będziesz bardzo ostrożny, skończysz w anty-wzorcu REST .
Niektóre frameworki, które dobrze to robią , to web.py , Flask i Bottle . W połączeniu z biblioteką mimerender (pełne ujawnienie: napisałem to), pozwalają ci pisać fajne usługi internetowe RESTful:
Logika usługi jest implementowana tylko raz, a poprawny wybór reprezentacji (nagłówek Akceptuj) + wysłanie do odpowiedniej funkcji renderowania (lub szablonu) odbywa się w uporządkowany, przejrzysty sposób.
Aktualizacja (kwiecień 2012 r.) : Dodano informacje o widokach klasowych Django, metodach MethodDispatcher CherryPy oraz platformach Flask i Bottle. Żadne z nich nie istniało, kiedy zadano pytanie.
źródło
Zaskoczony nikt nie wspomniał o kolbie .
źródło
Używamy Django do usług sieciowych RESTful.
Zauważ, że - po wyjęciu z pudełka - Django nie miał wystarczająco szczegółowego uwierzytelnienia na nasze potrzeby. Użyliśmy interfejsu Django-REST , który bardzo nam pomógł. [Od tego czasu stworzyliśmy własne, ponieważ zrobiliśmy tyle rozszerzeń, że stał się koszmarem konserwacji.]
Mamy dwa rodzaje adresów URL: adresy URL „html”, które implementują strony HTML zorientowane na człowieka, oraz adresy URL „json”, które implementują przetwarzanie zorientowane na usługi sieciowe. Nasze funkcje widoku często wyglądają tak.
Chodzi o to, że użyteczna funkcjonalność jest uwzględniona w dwóch prezentacjach. Prezentacja JSON jest zwykle tylko jednym obiektem, który został zamówiony. Prezentacja HTML często zawiera wszelkiego rodzaju pomoce nawigacyjne i inne wskazówki kontekstowe, które pomagają ludziom w produktywności.
Wszystkie
jsonView
funkcje są bardzo podobne, co może być nieco denerwujące. Ale to jest Python, więc włącz ich do klasy na żądanie lub napisz dekoratorów, jeśli to pomoże.źródło
y = someUsefulThing(...)
jest to „Okropne powtórzenie”, wówczas wszystkie odniesienia do wszystkich funkcji i metod są „okropne”. Nie rozumiem, jak unikać odwoływania się do funkcji więcej niż raz.someUsefulThing(request, object_id)
jest z wyrażeniem pobierania danych. Teraz masz dwie kopie tego samego wyrażenia w różnych punktach swojego programu. W zaakceptowanej odpowiedzi wyrażenie danych jest zapisywane jeden raz. Zastąp swojesomeUsefulThing
połączenie długim ciągiem, polubpaginate(request, Post.objects.filter(deleted=False, owner=request.user).order_by('comment_count'))
i spójrz na kod. Mam nadzieję, że to zilustruje mój punkt widzenia.Zobacz wiki Python Web Frameworks .
Prawdopodobnie nie potrzebujesz ram pełnego stosu , ale pozostała lista jest wciąż dość długa.
źródło
Naprawdę lubię CherryPy . Oto przykład spokojnej usługi internetowej:
Podkreśla to, co naprawdę lubię w CherryPy; jest to całkowicie działający przykład, który jest bardzo zrozumiały nawet dla kogoś, kto nie zna frameworka. Jeśli uruchomisz ten kod, możesz natychmiast zobaczyć wyniki w przeglądarce internetowej; np. odwiedzając http: // localhost: 8080 / celc_to_fahr? stopni = 50 wyświetli się
122.0
w przeglądarce internetowej.źródło
Spojrzeć na
źródło
Nie widzę żadnego powodu, aby używać Django tylko do ujawnienia interfejsu API REST, istnieją lżejsze i bardziej elastyczne rozwiązania. Django przenosi na stół wiele innych rzeczy, które nie zawsze są potrzebne. Na pewno nie jest to konieczne, jeśli chcesz udostępnić tylko część kodu jako usługę REST.
Moje osobiste doświadczenie, fwiw, polega na tym, że kiedy będziesz mieć uniwersalną strukturę, zaczniesz używać jej ORM, wtyczek itp. Tylko dlatego, że jest to łatwe i w żadnym momencie nie będziesz zależny bardzo trudno się go pozbyć.
Wybór frameworka jest trudną decyzją i unikałbym wyboru rozwiązania pełnego stosu tylko po to, aby odsłonić interfejs API REST.
Teraz, jeśli naprawdę potrzebujesz / chcesz korzystać z Django, to Piston to przyjemny framework REST dla aplikacji django.
To powiedziawszy, CherryPy też wygląda naprawdę ładnie, ale wydaje się bardziej RPC niż REST.
Patrząc na próbki (nigdy go nie użyłem), prawdopodobnie web.py jest najlepszy i najczystszy, jeśli potrzebujesz tylko REST.
źródło
Oto dyskusja w dokumentach CherryPy na temat REST: http://docs.cherrypy.org/dev/progguide/REST.html
W szczególności wspomina o wbudowanym dyspozytorze CherryPy o nazwie MethodDispatcher, który wywołuje metody oparte na ich identyfikatorach czasowników HTTP (GET, POST itp.).
źródło
W 2010 r. Społeczności Pylons i repoze.bfg „połączyły siły”, aby stworzyć Pyramid , platformę internetową opartą w największym stopniu na repoze.bfg. Zachowuje filozofię swoich struktur nadrzędnych i może być używany do usług RESTful . Warto spojrzeć.
źródło
Tłok jest bardzo elastyczną strukturą do okablowania interfejsów API RESTful dla aplikacji Django.
źródło
Wygląda na to, że wszelkiego rodzaju frameworki sieci Python mogą teraz implementować interfejsy RESTful.
Dla Django, oprócz tastypie i tłoka, django-rest-framework jest obiecującym wartym wspomnienia. Płynnie migrowałem już jeden z moich projektów.
Szybki przykład:
Weźmy przykład z oficjalnej strony, wszystkie powyższe kody zapewniają interfejs API, własny objaśniający dokument (jak usługa internetowa na bazie mydła), a nawet piaskownicę, aby trochę przetestować. Bardzo wygoda.
Linki: http://django-rest-framework.org/
źródło
Nie jestem ekspertem w świecie Pythona, ale używam django, który jest doskonałym frameworkiem internetowym i można go użyć do stworzenia spokojnego frameworka.
źródło
web2py zawiera obsługę łatwego budowania RESTful API, opisanych tutaj i tutaj (wideo). W szczególności spójrz na
parse_as_rest
, co pozwala zdefiniować wzorce adresów URL, które mapują argumenty żądań na zapytania do bazy danych; ismart_query
, który umożliwia przekazywanie dowolnych zapytań w języku naturalnym w adresie URL.źródło
Jeśli używasz Django, możesz rozważyć django-tastypie jako alternatywę dla tłoka django . Łatwiej jest dostroić źródła danych spoza ORM niż tłok i ma świetną dokumentację .
źródło
Zdecydowanie polecam TurboGears lub Bottle:
TurboGears:
Butelka:
źródło
Pracujemy nad ramą dla ścisłych usług REST, sprawdź http://prestans.googlecode.com
W tej chwili na początku Alpha, testujemy przeciwko mod_wsgi i Google AppEngine.
Poszukuję testerów i opinii. Dzięki.
źródło