Faits :
A.
Par jugement du 3 décembre 2013, le Tribunal correctionnel de l'arrondissement de l'Est vaudois a condamné X._ pour infraction grave à la loi fédérale sur les stupéfiants (ci-après: LStup) à une peine privative de liberté de 4 ans sous déduction de 85 jours de détention provisoire, a ordonné la confiscation et la dévolution à l'Etat d'objets séquestrés et a mis les frais de la cause à la charge du prévenu. La détention pour des motifs de sûretés a été maintenue.
B.
Statuant sur appel de X._ et sur appel joint du Ministère public, la Cour d'appel pénale du Tribunal cantonal vaudois a, par jugement du 7 avril 2014, confirmé la décision de première instance et a mis les frais d'appel par moitié à la charge de X._, le solde étant laissé à la charge de l'Etat.
En substance, il est reproché à X._ d'avoir, entre le mois de mai 2011 et le 12 juillet 2011, par le biais de plusieurs transactions effectuées notamment à Genève, Vevey, Berne et en Valais, commercialisé au total au moins 600 grammes de cocaïne brute d'une valeur de l'ordre de 34'000 francs.
Au moment du jugement cantonal, le casier judiciaire du recourant comportait six condamnations prononcées entre le 5 avril 2006 et le 3 septembre 2013. Parmi celles-ci figurent trois condamnations pour infractions à la LStup, à des peines allant de 10 jours-amende à 30 jours d'emprisonnement.
C.
X._ forme un recours en matière pénale auprès du Tribunal fédéral contre le jugement cantonal et conclut, avec suite de frais et dépens, à sa réforme en ce sens qu'il soit condamné pour infraction à la LStup à une peine privative de liberté de 3 ans, sous déduction de 85 jours de détention provisoire, avec une partie de peine à exécuter de 18 mois et un délai d'épreuve de 5 ans. Subsidiairement, il conclut à l'annulation du jugement cantonal et au renvoi de la cause à l'autorité cantonale pour nouveau jugement. Il sollicite en outre l'assistance judiciaire.

Considérant en droit :
1.
Le recourant critique la quotité de la peine qui lui a été infligée. Il se plaint d'arbitraire dans l'établissement des faits s'agissant de la quantité de drogue trafiquée et invoque une violation de l'<ref-law> en lien avec les critères de fixation de la peine.
1.1. Dans le recours en matière pénale, les constatations de fait de la décision entreprise lient le Tribunal fédéral (<ref-law>), sous les réserves découlant des art. 97 al. 1 et 105 al. 2 LTF, soit pour l'essentiel de l'arbitraire dans la constatation des faits (sur la notion d'arbitraire: cf. <ref-ruling> consid. 2.1 p. 18 s.; <ref-ruling> consid. 6.1 p. 379 s.). La recevabilité de tels griefs, ainsi que de ceux déduits du droit constitutionnel et conventionnel, suppose l'articulation de critiques circonstanciées (<ref-ruling> consid. 3 p. 105), claires et précises, répondant aux exigences de motivation accrues déduites de l'<ref-law> (<ref-ruling> consid. 1.4 p. 287). Les critiques appellatoires sont, en particulier, irrecevables (cf. <ref-ruling> consid. 5.1 p. 356).
1.2. L'<ref-law> prévoit que le juge fixe la peine d'après la culpabilité de l'auteur. Il prend en considération les antécédents et la situation personnelle de ce dernier ainsi que l'effet de la peine sur son avenir (al. 1). L'alinéa 2 de cette disposition énumère une série de critères à prendre en considération pour déterminer la culpabilité de l'auteur. En ce qui concerne les principes généraux relatifs à la fixation de la peine, on peut renvoyer aux arrêts topiques (<ref-ruling> et <ref-ruling>).
En matière de trafic de stupéfiants, il y a lieu de tenir compte plus spécifiquement des éléments suivants. Même si la quantité de drogue ne joue pas un rôle prépondérant, elle constitue sans conteste un élément important. Elle perd cependant de l'importance au fur et à mesure que l'on s'éloigne de la limite, pour la cocaïne de 18 grammes, à partir de laquelle le cas doit être considéré comme grave au sens de l'<ref-law> (cf. ancien <ref-law>; <ref-ruling> consid. 3.2 p. 103; <ref-ruling> consid. 2a p. 338; <ref-ruling> consid. 3b p. 145). Le type de drogue et sa pureté doivent aussi être pris en considération. Si l'auteur sait que la drogue est particulièrement pure, sa culpabilité sera plus grande. En revanche, sa culpabilité sera moindre s'il sait que la drogue est diluée plus que normalement (<ref-ruling> consid. 2c p. 301 s.; <ref-ruling> consid. 2b/aa p. 196). Le type et la nature du trafic en cause sont aussi déterminants. L'appréciation est différente selon que l'auteur a agi de manière autonome ou comme membre d'une organisation. Dans ce dernier cas, il importera de déterminer la nature de sa participation et sa position au sein de l'organisation. L'étendue du trafic entrera également en considération. Un trafic purement local sera en règle générale considéré comme moins grave qu'un trafic avec des ramifications internationales. Enfin, le nombre d'opérations constitue un indice pour mesurer l'intensité du comportement délictueux. Celui qui écoule une fois un kilo d'héroïne sera en principe moins sévèrement puni que celui qui vend cent grammes à dix reprises. S'agissant d'apprécier les mobiles qui ont poussé l'auteur à agir, le juge doit distinguer le cas de celui qui est lui-même toxicomane et agit pour financer sa propre consommation de celui qui participe à un trafic uniquement poussé par l'appât du gain (arrêt 6B_107/2013 du 15 mai 2013 consid. 2.1.1 et les références citées).
Pour fixer la peine, le juge dispose d'un large pouvoir d'appréciation. Par conséquent, le Tribunal fédéral n'intervient que s'il sort du cadre légal, s'il se fonde sur des critères étrangers à l'<ref-law>, s'il omet de prendre en considération des éléments d'appréciation prévus par cette disposition ou, enfin, si la peine qu'il prononce est exagérément sévère ou clémente au point de constituer un abus du pouvoir d'appréciation (<ref-ruling> consid. 5.6 p. 61; <ref-ruling> consid. 2.1 p. 19 s.).
1.3. En l'espèce, tant l'autorité de première instance que la cour d'appel ont retenu que le recourant avait vendu une quantité de drogue brute de 600 grammes. S'agissant du taux de pureté de celle-ci, l'autorité cantonale s'est écartée du jugement de première instance, à teneur duquel le recourant avait écoulé une quantité de cocaïne pure de 328.69 grammes (430 x 64.58 % + 170 x 30 %), pour s'en tenir à la version la plus favorable au recourant, soit 180 grammes de cocaïne pure (600 grammes à un taux de pureté moyen de 30 %). La cour d'appel a toutefois considéré que la modification de la quantité de drogue pure n'imposait pas en soi une réduction de la peine, dans la mesure où les transactions et profits illicites demeuraient inchangés, étant précisé qu'en tout état la quantité de drogue pure trafiquée correspondait à dix fois le cas grave et consacrait ainsi des faits objectivement graves. En outre, le fait de vendre une drogue diluée lui avait permis de réaliser des profits plus importants, ainsi qu'il l'avait admis aux débats de première instance; sa culpabilité ne s'en trouvant pas diminuée.
En définitive, la cour cantonale a conclu à une culpabilité très lourde du recourant, en retenant à sa charge qu'il n'était pas toxicomane, qu'il s'adonnait au trafic de drogue à côté de son travail pour gagner encore plus d'argent, le faisant apparaître comme un trafiquant mû exclusivement par l'appât du gain, qu'il avait été condamné à plusieurs reprises pour le même motif sans que cela ne modifie en rien son comportement. Celui-ci s'était au contraire aggravé dès lors qu'il endossait un rôle de semi-grossiste. Il n'avait par ailleurs pas esquissé de regrets ni de prise de conscience et s'était même rétracté à l'audience de jugement. La cour cantonale n'a pas retenu d'éléments à décharge.
1.4. Le recourant affirme que la cour cantonale ne pouvait pas revoir la quantité de drogue pure à la baisse sans que cela n'ait d'impact sur le nombre de transactions et les profits engendrés, étant rappelé que le montant de ceux-ci n'ont pas pu être établis. Il reproche à la cour cantonale un établissement arbitraire des faits. Or, il est établi et non contesté que le recourant a écoulé 600 grammes de drogue brute d'une valeur de l'ordre de 34'000 francs en effectuant plusieurs transactions pendant la période pénale. Quand bien même le montant des bénéfices n'a pas pu être établi, la décision cantonale indique la valeur de la drogue brute écoulée et précise que, malgré le taux de pureté finalement retenu, les 180 grammes de cocaïne pure ont été dilués afin de réaliser des profits plus importants. L'on ne saurait taxer le raisonnement cantonal d'arbitraire de sorte que la critique du recourant doit être rejetée.
En tant que le recourant suggère que la modification de la quantité de drogue pure retenue imposerait une réduction de la peine, il est rappelé que la quantité était en tout état dix fois supérieure au seuil requis pour constituer un cas grave, de sorte que ce critère perd de son importance pour fixer la peine en l'espèce. Par ailleurs, le taux de pureté de la drogue vendue par le recourant, fixée en l'espèce à 30 %, demeure plus élevé que le taux de pureté moyen de la cocaïne sur le marché de rue (cf. jugement entrepris, consid. 3 p. 14), de sorte qu'il ne peut pas invoquer à sa décharge une drogue particulièrement diluée (cf. <ref-ruling> consid. 2c p. 301 s.).
Le recourant reproche à la cour cantonale de ne pas avoir retenu à sa décharge, son éviction du trafic de cocaïne pour avoir coupé la drogue. Or il ne prétend pas et ne tente pas davantage de démontrer que cet élément de fait, qui ne ressort pas du jugement entrepris, aurait été omis arbitrairement (<ref-law>). Il est ainsi irrecevable à s'en prévaloir afin d'obtenir une diminution de sa peine.
1.5. Le recourant conteste avoir eu une position hiérarchique élevée dans le trafic de stupéfiants et en déduit que sa peine devrait être diminuée.
Le rôle joué par un trafiquant au sein du réseau est une question de fait qui ne peut être revue que sous l'angle de l'arbitraire (cf. arrêt 6B_107/2013 du 15 mai 2013 consid. 2.5). A teneur du jugement cantonal, le recourant occupait un rôle de semi-grossiste que ses nombreuses relations en matière de trafic de stupéfiants tissées au fil du temps et des récidives lui ont permis d'assumer (cf. jugement entrepris, consid. 4.3 p. 16). Le simple fait, qu'à la demande du fournisseur, le recourant ait été accompagné lors d'une livraison de 100 grammes de cocaïne brute à un client en Valais ne suffit pas à démontrer l'arbitraire de la qualification de semi-grossiste. Il s'agit en effet de l'une des plus importantes transactions parmi celles retenues et c'est l'unique qui ait nécessité un accompagnement afin de surveiller la livraison. La restitution au fournisseur de la drogue refusée par le client ne permet pas davantage de démontrer l'arbitraire des constatations cantonales. En effet, la cour d'appel a qualifié le recourant de semi-grossiste sur la base des nombreuses transactions effectuées, en retenant notamment qu'il achetait la marchandise auprès d'un fournisseur principal et la revendait à des détaillants. Or si cette position n'implique certes pas une indépendance totale, elle lui laisse cependant une certaine liberté d'action correspondant à celle d'un intermédiaire.
En tant que le recourant se contente d'affirmer qu'il n'avait aucun pouvoir décisionnel et qu'il n'a pas attiré de nouvelles personnes dans le trafic de stupéfiants, il procède de manière appellatoire, partant irrecevable (<ref-law>).
Si le profit dégagé par le trafiquant constitue un élément permettant de déterminer sa position dans l'organisation, il ne constitue pas le seul critère. Ainsi, l'impossibilité de déterminer le montant perçu par le recourant pour les transactions reprochées n'empêche pas de le qualifier de semi-grossiste sur la base notamment de l'organisation du réseau, du type de commandes, de la quantité de cocaïne vendue, de la valeur de cette dernière, des différentes relations entre les trafiquants et du nombre de transactions effectuées en une période donnée. Sous cet angle également, le recourant échoue à démontrer l'arbitraire de la constatation cantonale.
1.6. En lien avec ses antécédents, le recourant ne saurait tirer argument du fait qu'il n'a pas été condamné pour des infractions graves à la LStup mais uniquement pour des cas simples. En effet, selon l'<ref-law>, les antécédents doivent être pris en considération dans le cadre de la fixation de la peine. En l'occurrence, parmi les inscriptions figurant au casier du recourant, trois portent sur des infractions à la LStup, ce qui justifie d'autant plus que la récidive soit prise en considération en sa défaveur lors de la fixation de la peine.
Le fait que quatre ans se soient écoulés entre la dernière condamnation et les faits reprochés ne permet pas de relativiser la récidive, ce en particulier au vu du nombre d'antécédents.
1.7. Le recourant ne saurait rien déduire en sa faveur du fait que le trafic reproché aurait eu lieu sur une courte période (de mai à juillet 2011), durant laquelle il s'est comporté en "mauvais dealer". En effet, dans la mesure où le trafic a été suspendu au moment où le fournisseur principal du recourant a été interpellé, soit le 12 juillet 2011 (cf. jugement entrepris, consid. 4 p. 12), ce n'est pas de son propre chef que le recourant a mis un terme à son activité illicite, ce indépendamment de ses compétences en la matière. Il sied à ce propos de relever l'intensité de l'activité délictueuse, compte tenu du nombre élevé de transactions effectuées dans ce laps de temps.
1.8. Rappelant qu'il vit en Suisse au bénéfice d'un permis de séjour et qu'il est père de deux enfants en bas âge, le recourant allègue que la peine est excessivement sévère compte tenu du risque qui en découle de se voir retirer son permis de séjour et d'être ainsi éloigné de sa famille (cf. art. 62 let. f LEtr).
Il est rappelé qu'une peine privative de liberté d'une certaine durée a inévitablement des répercussions sur les membres de la famille du condamné. Cette conséquence ne peut toutefois conduire à une réduction de la peine qu'en cas de circonstances extraordinaires (arrêts 6B_99/2012 du 14 novembre 2012 consid. 4.5; 6B_716/2010 du 15 novembre 2010 consid. 2.3). De telles circonstances ne sont pas données à ce stade. En tout état, il n'appartient pas au juge pénal de tenir compte des éventuelles conséquences administratives de la sanction, sur le plan du droit des étrangers, pour fixer la peine. Partant, les considérations familiales soulevées par le recourant ne permettent pas de considérer que la peine a été fixée de manière excessivement sévère.
1.9. En définitive, compte tenu notamment des quantités de drogue en cause, du rôle assumé par le recourant dans le trafic de stupéfiants, du nombre de transactions, de son mobile (à savoir l'appât du gain) et de ses nombreux antécédents, la peine infligée de 4 ans de privation de liberté pour infraction grave à la LStup, ne procède pas d'un abus du pouvoir d'appréciation de l'autorité cantonale. S'agissant de l'infraction reprochée, il y a lieu de préciser que l'entrée en vigueur, le 1er juillet 2011, des nouvelles dispositions de la LStup, en particulier de l'<ref-law> (cf. ancien <ref-law>), ne porte pas conséquence sur le cadre de la peine, lequel demeure inchangé (peine privative de liberté d'un an au moins, cette sanction pouvant être cumulée avec une peine pécuniaire). Le grief de violation de l'<ref-law> doit être rejeté dans la mesure où il est recevable.
2.
Au vu de ce qui précède, le recours doit être rejeté dans la mesure de sa recevabilité. Comme les conclusions étaient vouées à l'échec, l'assistance judiciaire ne peut être accordée (<ref-law>). Le recourant, qui succombe, supportera les frais judiciaires (<ref-law>), dont le montant sera toutefois fixé en tenant compte de sa situation financière.

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
La demande d'assistance judiciaire est rejetée.
3.
Les frais judiciaires, arrêtés à 1'600 fr., sont mis à la charge du recourant.
4.
Le présent arrêt est communiqué aux parties et à la Cour d'appel pénale du Tribunal cantonal du canton de Vaud.
Lausanne, le 27 octobre 2014
Au nom de la Cour de droit pénal
du Tribunal fédéral suisse
Le Président : Mathys
La Greffière : Boëton