Serving a webpage with Redstone - dart

I am developing a web application with Dart using redstone and polymer
Because Dart allows for server and client side development, I wonder what a good pattern for a web application is (specifically to Dart)
Option 1:
Have a server, say, /bin/server.dart
1.1. get a request there and respond with json
#app.Route("/user/:id", methods: const [app.GET])
getUser(int id) { ... }
have a client, i.e. web/user.html and web/user.dart
2.1 in user.dart make a request to server
2.2 receive json and form a proper user.html
Option 2:
Have a server /bin/server
1.1 get a request there and respond with an html page, similar to
#app.Route("/")
helloWorld() => "Hello, World!";
If in the first case I more or less know (and understand) how to make things work, while i find it really frustrating that I do not take advantage of Dart's server-client code-sharing: I need to encode to and decode back json to get the same data. Is there a way to avoid it?
The second option is much less clear for me: how would I serve a web page in this way? How would I make Polymer do its work?
Answers on the questions in the text and a general explanation of a darty way to develop web apps are very much appreciated.

You can see a Redstone + Polymer application example here: https://github.com/luizmineo/io_2014_contacts_demo
Basically, it works as Option 1: The client and server communicates through a service API, and the data is encoded as JSON. Although, Redstone uses the shelf_static package to serve the client code to the browser as well.
If you prefer, it's also possible to use a server side template engine, such as mustache, to build html pages in the server, although, I think it would be really difficult to integrate that with Polymer.
And finally, you always have to encode the data someway when transferring data between client and server, but this doesn't means they can't share code. They can use the same domain classes, for example. Check out the sample application linked above for more details.

I don't think the option 2 is possible. Polymer depends on dart:html which is not allowed on server side.

Related

Actionscript/ Wikipedia API

I'm working on Actionscript project , I need to call Wikipedia API's , but Wikipedia doesn't contain CrossDomain.xml file to enable flash access.
any suggestion !
Thanks you
If your project is a web page and you have control over the html source, you could simply proxy the calls via ExternalInterface to JavaScript. If you also have control over your server, you can write a very simple php script to relay your commands to wikipedia.
However, if you are on a web page but don't have control over the JS part, don't fret: Turns out you DO have full control by injecting whatever JS you like:
// initially: call anonymous function writing a named function into global JS space
// you could more or less inject a complete framework here. Or a simple JS http proxy.
ExternalInterface.call('function(){hello = function(foo){alert(foo);};}()');
// somewhere else in your code
ExternalInterface.call('hello("world")');
Isn't it fun how you can work around a completely useless security measure (cossdomain.xml) by abusing a critical security problem (javascript injection)?
:)

Is there a way to browse WSDL endpoints using a browser?

I want to test the results from a WSDL service in a browser like IE9 or FireFox. I know that I can view the WSDL XML, but I want to test the return results of an endpoint called GetEmployeeById that accepts a parameter called Id and returns a class. I am assuming this is all serialized to XML, so a browser would be a good fit for testing this. Is this possible?
In case you are using Visual Studio for .net development, I think something much better than a browser probably would to use:
wcftestclient <url>
which can be called from the command prompt and is part of the tools from visual studio.
The tool will help you to build and receive complex objects and see the results already serialized.
internet explorer let's you make a request with simple string parameters if the WSDL provides enough information.
If you haven't seen it, then probably the WSDL is only for discoverability reasons, probably just points to another service in a different transport protocol, not port 80, if the service is not on port 80 you won't be able to use your browser.
You have another more complex tool called FIDDLER that you can format any kind of http request, as well as receiving any kind of requests, like json for example.
You can use this URL to test WSDL endpoints, send request and see response.

Any Ruby AMF clients out there?

I'm looking for a way to push/receive AMF0 / AMF3 messages in Ruby(Rails).
From what I read rubyAMF can only act as a server.
What I need is a library that allows client access to FMS/Wowza.Any ideas?
As the developer of RocketAMF http://github.com/warhammerkid/rocket-amf, I don't know of any AMF libraries that can act as clients out of the box. However, if you're interested in it, it shouldn't be that difficult to reverse the server code in RocketAMF to work as a client. You would just write a serializer for RocketAMF::Request that uses the standard message calling style (#<RocketAMF::Request:0x10167b658 #headers=[], #messages=[#<RocketAMF::Message:0x10167ae88 #response_uri="/1", #data=["session stirng", 42.0], #target_uri="App.helloWorld">], #amf_version=3>). Then you would write a deserializer for RocketAMF::Response.
I'll try to put together a new RocketAMF build in the next couple days that can communicate with FMS, but it's not a guarantee.

How to properly load HTML data from third party website using MVC+AJAX?

I'm building ASP.NET MVC2 website that lets users store and analyze data about goods found on various online trade sites. When user is filling a form to create or edit an item, he should have a button "Import data" that automatically fills some fields based on data from third party website.
The question is: what should this button do under the hood?
I see at least 2 possible solutions.
First. Do the import on client side using AJAX+jQuery load method.
I tried it in IE8 and received browser warning popup about insecure script actions. Of course, it is completely unacceptable.
Second. Add method ImportData(string URL) to ItemController class. It is called via AJAX, does the import + data processing server-side and returns JSON-d result to client.
I tried it and received server exception (503) Server unavailable when loading HTML data into XMLDocument. Also I have a feeling that dealing with not well-formed HTML (missing closing tags, etc.) will be a huge pain. Any ideas how to parse such HTML documents?
Unfortunately you can't do cross-site loading usting JavaScript without using JSONP. This is a security issue. Your best bet would be to AJAX a request to one of your controller's actions and have it do the web request and return the result to the client.
As far as the 503 Server Unavailable goes, does this happen on every request? It sounds like you're parsing information from WoW Armory. They throttle web requests and will ban you after a certain about of time.
Use http://htmlagilitypack.codeplex.com/ to process HTML on server. Or regexps. Or string.IndexOf. Or import MSHTML via Interop library and use it. Do not load HTML into XML documents unless you're absolutely sure it's pure XHTML.
Also, try to see if 3rd party websites provide more direct access to data - XML, REST, web services.

how to write an artificial request

how can i construct a artificial request to login to twitter or any site for that matter that accpets post forms.
what i've been trying is to extract the headers and post request parameters from the origional request(directed at the action atribute of the form) and copy it to the outgoing url object that i am making.but it just won't work.
And i am aware of the apis and i don't wanna use them i am trying this to write a web proxy site.
I don't fully understand your question (e.g. "aware of the APIs and I don't want to use them") but urlib may be useful, particularly urllib.FancyURLopener(...).
Are you looking for libcurl ?
It's a library that allows you to interact with servers using a bunch of different protocoles, including HTTP. So, for instance, you can simulate POST or GET request.
You can use it as a command line tool or as a library from many languages (PHP, C, etc ...)

Resources