Najlepsze praktyki i wytyczne dotyczące projektowania API [zamknięty]

Jakie są wytyczne i najlepsze praktyki, których mogę przestrzegać podczas projektowania API? Wiem, że API powinno być łatwe w użyciu i elastyczne. Niestety terminy te mogą być raczej subiektywne, więc szukałem konkretnych wytycznych dotyczących dobrego projektowania API.

Author: Roman C, 2010-04-12

5 answers

Uznałem, że warto obejrzeć Joshua Bloch - Jak zaprojektować dobre API i dlaczego ma to znaczenie

Przykłady są w Javie, ale nadal można rysować paralele. Skoro nie wspomniałeś o konkretnej technologii, zakładam, że nie chcesz niszowych rozwiązań.

 56
Author: Gishu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-20 09:09:04

Jako ktoś, kto musi konsumować Tony API...

Napisz swoje API w spójny sposób:

  1. Spójne nazewnictwo w samym API. Używaj czasowników, rzeczowników, słów kluczowych w dokładnie tym samym stylu.

  2. Zgodny z docelowym środowiskiem, w którym będzie używany. Jeśli. NET, zapoznaj się z wytycznymi Microsoftu dotyczącymi nazewnictwa.

  3. Spójne koncepcje. Wzór fabryczny? Wzór budowniczego? Metody statyczne? Interfejsy? Wybierz jedną i trzymaj się to. Naprawdę. Nie ma czegoś takiego jak mały wyjątek od reguły. Będzie wystawać jak wielki ból kciuka. Więcej niż 1 wyjątek? Twoje API jest coraz bardziej Amatorskie.

Tu jest jeszcze jeden: specyficzność.

  1. Klasy bazowe, które mogę zaimplementować, jeśli zdecydujesz się je dostarczyć, powinny mieć kilka dobrze zdefiniowanych funkcji do zaimplementowania. Nie mów mi, że "GetData () "zwraca" object []", a następnie oczekuj, że go zaimplementuję, dowiedz się, dlaczego muszę go rzucić do ciągu znaków [], a następnie debugować, dlaczego jest wywoływany 20 razy. Znacznie lepiej jest mieć DataPoint [] GetChartData (), string[] GetLabelData (), itd. i pozwól mi wybrać, które z nich powinienem wdrożyć.

  2. Proszę się nie wygłupiać-długie z nazwami: PostRenderColorWheelModifyHSVBasehandler. Często można refaktorować super-specyficzne rzeczy w bardziej ogólne nazwy + parametry.

  3. Parametry łańcucha są Nie-Nie! Użyj wyliczeń. Nie chcę używać takiego opiekuna jak

    PostRenderHandler("ColorWheel", "HSV", someDelegate);

Wolałbym enum, które mogę zbadać:

PostRenderHandler(ModuleType.ColorWheel, Options.ColorWheelHSV, someDelegate);
Stary, mógłbym kontynuować... Power to that Josh Bloch guy-well-written APIs can be really awesome... złe mogą być naprawdę bolesne.
 30
Author: Jeff Meatball Yang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-30 00:49:03

Jest dobra prezentacja na ten temat od Joshua Bloch. Prezentacja wykorzystuje Javę, ale pomysły są niezależne od języka. inne źródło (pdf) dla szybkiego przeglądu.

 11
Author: Csaba_H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-02 10:44:55

To jest link od Microsoftu: http://msdn.microsoft.com/en-us/library/ms229042.aspx

Jest też ta książka: Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable. NET Libraries

 9
Author: Klinger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-12 04:29:05

Myślę, że twoje pytanie nie otrzyma odpowiedzi w takiej ilości miejsca z ilością informacji, które podajesz. Umieściłem kilka linków z wpisując "API design" w google, a na pierwszej stronie dostać te, które wyglądają ładnie dobry

Http://web.archive.org/web/20151229055009/http://lcsd05.cs.tamu.edu/slides/keynote.pdf

Http://www.artima.com/weblogs/viewpost.jsp?thread=142428

Http://web.archive.org/web/20090520234149/http://chaos.troll.no/~shausman/api-design/api-design.pdf

 3
Author: Romain Hippeau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-02 10:47:41